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