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
>>>> ​
>>>>
>>>
>>

Reply via email to