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

Reply via email to