什么时候使用Julia的convert()?

问题描述 投票:0回答:1

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)
julia
1个回答
15
投票

您的代码有两个问题:

  • 诸如
    +
    之类的算术运算符仅提升
    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
© www.soinside.com 2019 - 2024. All rights reserved.