Julia 朱莉娅:方法无法访问转换方法的可能原因是什么?

Julia 朱莉娅:方法无法访问转换方法的可能原因是什么?,julia,Julia,我有一个模块,我们称之为MyMod,它包含一个可变结构MyType。在同一个源文件中,我定义了与MyType关联的函数。其中一个函数是Base.convert(::Type{Vector{T},a::MyType),其中T对函数进行了阴影处理。如果你定义如下 > convert(::Type{Float64},x) = 2 convert (generic function with 1 method) > convert(Float64,5) 2 现在convert和Base.

我有一个模块,我们称之为
MyMod
,它包含一个
可变结构MyType
。在同一个源文件中,我定义了与
MyType
关联的函数。其中一个函数是
Base.convert(::Type{Vector{T},a::MyType),其中T对函数进行了阴影处理。如果你定义如下

> convert(::Type{Float64},x) = 2
convert (generic function with 1 method)

> convert(Float64,5)
2
现在
convert
Base.convert
是不同的。如果要将调度添加到
Base.convert
,则应执行
Base.convert(x,y)=…

请注意,如果先使用函数,Julia将警告您:

> convert(Float64,2)
2.0

> convert(::Type{Float64},x) = 2
ERROR: error in method definition: function Base.convert must be explicitly imported to be extended
Stacktrace:
 [1] top-level scope at none:0

你能发布一个完全可复制的例子吗?因为你所描述的应该有效(我刚刚检查过)。我同意它应该有效,这就是为什么我有点惊讶的原因。我试图避免将其特定于我的源代码,但我会看看我可以去掉什么,并且仍然可以复制,以避免您不得不克隆一个大型库。
function Base.convert(::Type{Vector{MyTypeB}}, a::MyTypeC)
> convert(::Type{Float64},x) = 2
convert (generic function with 1 method)

> convert(Float64,5)
2
> convert(Float64,2)
2.0

> convert(::Type{Float64},x) = 2
ERROR: error in method definition: function Base.convert must be explicitly imported to be extended
Stacktrace:
 [1] top-level scope at none:0