If you can accept an extra call of your function t,

f2{T}(t::Function,a::AbstractArray{T})::Dict{T,typeof(t(a[1])} = Dict((x,t(x
)) for x in a)


credit to mauro3 in discussion of Julia issue 1090.


On Monday, November 14, 2016 at 6:17:38 AM UTC-5, bogumil....@gmail.com 
wrote:
>
> Thank you.
> However, my problem is that t(x) does not have to have type T.
> And this is exactly the question - how to determine type of t(x) given 
> that we know that x has type T.
>
> On Monday, November 14, 2016 at 12:29:56 AM UTC+1, Ralph Smith wrote:
>>
>> Until the issue with generators is resolved, this may suffice:
>>
>> f2x{T}(t::Function,a::AbstractArray{T})::Dict{T,T} = Dict((x,t(x)) for x 
>> in a)
>>
>>
>> I think that diverts all the ambiguities to checks by conversion methods.
>>
>> On Sunday, November 13, 2016 at 11:16:20 AM UTC-5, bogumil....@gmail.com 
>> wrote:
>>>
>>> I have the folowing questions:
>>>
>>>    1. Why when f2 is used as written above the return type is not 
>>>    Dict{Float64,Float64} (like in the case of f1 where it is 
>>>    Array{Float64,1})?
>>>    2. How to fix f2 so that Julia can infer the return type?
>>>    3. Is there a way to change f2 so that first empty Dict{<element 
>>>    type of a>,<element type of t(a)>}() variable is created, where <element 
>>>    type of a> and <element type of t(a)> are determined based on the 
>>>    passed arguments, and only next this dictionary is populated with data?
>>>
>>>
>>>

Reply via email to