A http://julia.readthedocs.org/en/latest/manual/conversion-and-promotion/, v'è una discussione circa l'aggiunta di numeri interi per galleggianti e così via, e e alla fine si diceQuando viene utilizzato il convert() di Julia?
User-defined types can easily participate in this promotion system by defining methods for conversion to and from other types, and providing a handful of promotion rules defining what types they should promote to when mixed with other types.
Da questo ho dedotto che, nel definire il mio tipo numerico, ho semplicemente bisogno di definire come per convertirlo in un tipo noto affinché funzioni con funzioni su di esso. Ma ho provato questo e non sembra funzionare:
julia> type MyType
n::Int
end
julia> convert(::Type{Int}, x::MyType) = x.n
convert (generic function with 1 method)
julia> convert(Int, MyType(1))
1
julia> MyType(1) + 1
ERROR: `+` has no method matching +(::MyType, ::Int64)
Ci può spiegare la differenza tra la promozione e la conversione? – asmeurer
'convert' dice al compilatore come eseguire la conversione da' MyType' a 'Int' quando è già stato deciso di farlo. 'promote_rule' dice al compilatore quale conversione eseguire quando vede sia' Int' che 'MyType' come operandi - se convertire' MyType' in 'Int' o' Int' in 'MyType'. – jch
Con il tuo codice mi viene visualizzato 'ERRORE: nessuna promozione esiste per MyType e Int64 in + su promotion.jl: 158'. – asmeurer