Hi,
I ran into a problem with the result type of Dict comprehensions. If I
wrap the comprehension in a function, it produces the narrowest type,
otherwise the type of value is Any. Code looks like this:
## this version is not type stable, result of comprehension is a Dict
## with value type Any
function proportions{Tv,Tk}(dt::DynamicTable{Tv,Tk}, dims::Vector{Int})
d = _remaining_dims(dt,dims)
e = dt.elements
s = sum(dt,dims).elements
DynamicTable([key => value/s[key[d]] for (key,value) in e],
dt.ordering)
end
## in this version, type of Dict's value is the correct type (eg a
## Float64 for Tv=Int)
function proportions{Tv,Tk}(dt::DynamicTable{Tv,Tk}, dims::Vector{Int})
_proportions(e, s, d) = [key => value/s[key[d]] for (key,value) in e]
DynamicTable(_proportions(dt.elements, sum(dt,dims).elements,
_remaining_dims(dt, dims)),
dt.ordering)
end
I realize the example is not self-contained, but if the issue is not
something known and obvious and someone is willing to help me
investigate, I can provide a link to the source (not terribly long, but
longer than a snippet I could post here).
VERSION v"0.4.6-pre+4".
Best,
Tamas