Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

TypeError typeassert for custom typealias

I fail to understand the following behaviour

a = [1,2,3]
a::Vector  # works

d = Dict(0=>a)
typealias DictVector{K,V} Dict{K, Vector{V}}
d::DictVector  # fails

the error is the following

TypeError: typeassert: expected Dict{K,Array{V,1}}, got 
 Dict{Int64,Array{Int64,1}}
  in include_string(::String, ::String) at loading.jl:441
  in eval(::Module, ::Any) at boot.jl:234
  in (::Atom.##65#68)() at eval.jl:40
  in withpath(::Atom.##65#68, ::Void) at utils.jl:30
  in withpath(::Function, ::Void) at eval.jl:46
  in macro expansion at eval.jl:109 [inlined]
  in (::Atom.##64#67{Dict{String,Any}})() at task.jl:60

however Vector is itself as typealias Vector{T} Array{T,1} so what is the decisive difference between the two cases?

Any clarification is highly appriciated

like image 571
schlichtanders Avatar asked Jan 21 '26 01:01

schlichtanders


1 Answers

You're right that should work. It looks like this was a bug in the old type system in 0.5. It's fixed in the upcoming 0.6 release.

Here's a possible workaround for 0.5:

julia> typealias DictVector{K,V<:Vector} Dict{K,V}
Dict{K,V<:Array{T,1}}

julia> d::DictVector
Dict{Int64,Array{Int64,1}} with 1 entry:
  0 => [1,2,3]

julia> isa(d, DictVector)
true
like image 133
mbauman Avatar answered Jan 22 '26 18:01

mbauman