在http://julia.readthedocs.org/en/latest/manual/conversion-and-promotion/,有一个关于向浮点数添加整数的讨论,等等,最后它说
用户定义的类型可以通过定义与其他类型进行转换的方法,以及提供一些促销规则来定义与其他类型混合时应该促销的类型,从而轻松参与此促销系统。
由此推断,在定义我自己的数字类型时,我只需要定义如何将其转换为已知类型,以便使用它上面的函数。但是我尝试了这个并且它似乎不起作用:
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)
答案 0 :(得分:11)
您的代码存在两个问题:
+
等算术运算符仅提升Number
; 以下应该做你想做的事:
module Test
import Base: convert, promote_rule
type MyType <: Number
n :: Int
end
convert(::Type{Int}, x::MyType) = x.n
promote_rule(::Type{MyType}, ::Type{Int}) = Int
end