Glad to help. There is also a function Base.one(T) which is defined to give the multiplicative identity of T which for all subtypes of Real should be the same as convert(T, 1). You aren't really using it as the multiplicative identity though so I am not sure which is better.
On Sat, Mar 21, 2015, 11:55 AM Seth <[email protected]> wrote: > Thanks for pointing me in the right direction. I fixed it. It turns out > that when I set the unitrange (using 1:n), the "1" was being interpreted as > Int64, which caused the UnitRange to be Int64, which messed things up. I > now do a convert(T,1) in the construction and everything's good: > > julia> Graph(Int16(5)) > {5, 0} undirected graph > > > On Saturday, March 21, 2015 at 8:37:55 AM UTC-7, Seth wrote: >> >> James, >> >> Thanks. Here's what I get: >> >> julia> Graph(Int16(5)) >> ERROR: MethodError: `convert` has no method matching convert(::Type{ >> UnitRange{Int16}}, ::UnitRange{Int64}) >> This may have arisen from a call to the constructor UnitRange{Int16 >> }(...), >> since type constructors fall back to convert methods. >> Closest candidates are: >> convert{T}(::Type{T}, ::T) >> >> >> >> On Thursday, March 19, 2015 at 2:17:17 PM UTC-7, James Fairbanks wrote: >>> >>> You left out the initialization code for the fields in your excerpt >>> above. What happens when you call Graph(Int16(5))? >>> >>> On Friday, March 6, 2015 at 2:42:20 PM UTC-5, Seth wrote: >>>> >>>> >>>> >>>> I have >>>> >>>> abstract AbstractGraph{T<:Integer} >>>> >>>> type Graph{T}<:AbstractGraph{T} >>>> vertices::UnitRange{T} >>>> edges::Set{Edge{T}} >>>> finclist::Vector{Vector{Edge{T}}} # [src]: ((src,dst), (src,dst), >>>> (src,dst)) >>>> binclist::Vector{Vector{Edge{T}}} # [dst]: ((src,dst), (src,dst), >>>> (src,dst)) >>>> end >>>> >>>> function Graph{T<:Integer}(n::T) >>>> >>>> >>>> >>>> >>>> >>>> and g = Graph(5) works and produces a graph of type Graph{Int64}, but g >>>> = Graph{Int64}(5) produces >>>> >>>> ERROR: MethodError: `convert` has no method matching >>>> convert(::Type{LightGraphs.Graph{Int64}}, ::Int64) >>>> >>>> This is a problem because I have >>>> >>>> function union{T<:AbstractGraph}(g::T, h::T) >>>> gnv = nv(g) >>>> r = T(gnv + nv(h)) >>>> for e in edges(g) >>>> add_edge!(r,e) >>>> end >>>> for e in edges(h) >>>> add_edge!(r, gnv+src(e), gnv+dst(e)) >>>> end >>>> return r >>>> end >>>> >>>> >>>> >>>> Which is failing on line 3 (in the creation of the graph). >>>> >>>> What's the proper way of creating the object from a parameterized type? >>>> Thanks. >>>> >>>
