Migration 语言版本迁移中参数不匹配的函数,以及如何知道函数的签名

Migration 语言版本迁移中参数不匹配的函数,以及如何知道函数的签名,migration,julia,method-signature,Migration,Julia,Method Signature,我正在将一些代码从旧版本的Julia迁移到Julia 1.0.0。 虽然我已经修改了基本类型->可变结构,不可变->结构,但是我得到了错误 ERROR: LoadError: MethodError: no method matching ... 不匹配函数位于函数返回的函数中,也就是说,我使用一个函子,通过闭包更改内部函数的参数来更改它返回的函数的行为。问题出在返回的函数中,如果这影响了问题,我不知道 问题是: 这在迁移代码中常见吗?发生了什么事? 是否有一种打印函数签名的方法来调试问题?

我正在将一些代码从旧版本的Julia迁移到Julia 1.0.0。 虽然我已经修改了基本类型->可变结构,不可变->结构,但是我得到了错误

ERROR: LoadError: MethodError: no method matching ... 
不匹配函数位于函数返回的函数中,也就是说,我使用一个函子,通过闭包更改内部函数的参数来更改它返回的函数的行为。问题出在返回的函数中,如果这影响了问题,我不知道

问题是:

这在迁移代码中常见吗?发生了什么事? 是否有一种打印函数签名的方法来调试问题?我尝试了tipeoff,但没有返回所需的信息。 您知道调试这些签名不匹配问题的实用方法吗?
提前谢谢。

广告1。当传递给函数的内容类型发生更改且函数签名具有限制性时,可能会发生这种情况。例如,在Julia 0.6中,转置的返回类型如下:

在朱莉娅1.0中

julia> transpose([1,2,3])
1×3 LinearAlgebra.Transpose{Int64,Array{Int64,1}}:
 1  2  3
然后,如果您的函数期望RowVector,它将失败

公元2年。您可以这样做:

julia> f(x::Int) = y::Int -> y + x
f (generic function with 1 method)

julia> a = f(10)
#11 (generic function with 1 method)

julia> methods(a)
# 1 method for generic function "#11":
[1] (::getfield(Main, Symbol("##11#12")))(y::Int64) in Main at REPL[5]:1
公元3年。建议使用Julia 0.7进行代码迁移,因为它会打印在Julia 0.6和Julia 1.0之间更改的内容的警告

julia> f(x::Int) = y::Int -> y + x
f (generic function with 1 method)

julia> a = f(10)
#11 (generic function with 1 method)

julia> methods(a)
# 1 method for generic function "#11":
[1] (::getfield(Main, Symbol("##11#12")))(y::Int64) in Main at REPL[5]:1