Julia 和茱莉亚有点麻烦';s转换规则

Julia 和茱莉亚有点麻烦';s转换规则,julia,Julia,在Julia文档手册中,说明如下[1]: 什么时候叫convert 以下语言构造调用convert: 分配给数组将转换为数组的元素类型 [1] 我定义了以下代码: julia> abstract type Element end julia> abstract type Inline <: Element end julia> struct Str <: Inline content::String end julia&

在Julia文档手册中,说明如下[1]:

什么时候叫convert

以下语言构造调用convert:

  • 分配给数组将转换为数组的元素类型
[1]

我定义了以下代码:

julia> abstract type Element end

julia> abstract type Inline <: Element end

julia> struct Str <: Inline
           content::String
       end

julia> convert(::Type{Str}, e::String) = Str(e)
convert (generic function with 1 method)

julia> convert(::Type{Element}, e::String) = convert(Str, e)
convert (generic function with 2 methods)

有人能解释一下为什么上述方法失败了吗?如果可能的话,如何防止它失败?

代码的主要提示如下: 转换(带1方法的泛型函数) 这意味着
convert
函数只有一个定义(您的定义),因此出现了问题。当Julia使用
convert
时,它实际上调用
Base.convert
。因此,重载正确的方法:

Base.convert(::Type{Str}, e::String) = Str(e)
Base.convert(::Type{Element}, e::String) = convert(Str, e)
按预期使用您的代码。 简而言之,您的代码是正确的,只是重载了错误的转换(在使用Julia核心函数时始终添加
Base.method

Base.convert(::Type{Str}, e::String) = Str(e)
Base.convert(::Type{Element}, e::String) = convert(Str, e)