Unfortunately In my use case I would have to add a method for almost every method exported by another module:
see https://github.com/JuliaGraphs/Networks.jl/issues/4 The easiest way to do would be to use abstraction and inheritance, but in the other module (LightGraphs) I don't have an abstract type to inherit from There is some deeply rooted reason for not having implicit (but explicitly declared) conversion? Il giorno martedì 15 marzo 2016 15:37:33 UTC+1, Matt Bauman ha scritto: > > To generalize this idiom a bit, I think I'd write it as: > > Base.convert(::Type{Float64}, a::MyNum) = convert(Float64, a.x) > f(a) = f(convert(Float64, a)) > f(a::Float64) = 2. # real algorithm > > Of course, this will also allow things like `f(1)`. > > > On Tuesday, March 15, 2016 at 10:18:30 AM UTC-4, Stefan Karpinski wrote: >> >> No, there is never any implicit conversion of arguments in Julia. >> However, all you need to do is add a method to f to get it to do what you >> want: >> >> f(a::MyNum) = convert(Float64, a.x) >> >> On Tue, Mar 15, 2016 at 6:54 AM, Carlo Lucibello <[email protected]> >> wrote: >> >>> >>> >>> Il giorno martedì 15 marzo 2016 11:51:31 UTC+1, Carlo Lucibello ha >>> scritto: >>>> >>>> Is it possible to have user defined implicit conversion in Julia? >>>> >>>> This is an example of how I imagine it should work: >>>> >>>> type MyNum >>>> x >>>> end >>>> >>>> implicit_convert(::Type(Float64), a::MyNum) = convert(Float64, a.x) >>>> >>>> f(x::Float64) = 2. >>>> f(MyNum(1.)) # error, sadly >>>> >>>> In C++ this behaviour can be obtained overloading >>>> >>> * overloading operator double() >>> >>>> PS I don’t want to use inheritance >>>> >>>> >>> >>
