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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数不匹配语言版本迁移中的参数,以及如何知道函数的签名相关的知识,希望对你有一定的参考价值。

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

ERROR: LoadError: MethodError: no method matching ... 

不匹配的函数在函数返回的函数中(也就是说,我使用函数来改变它返回的函数的行为,通过闭包来改变内部函数的参数)。问题出在返回的函数中(如果这会影响问题,我不知道)。

问题是:

  1. 这在迁移代码中是否常见?怎么了?
  2. 有没有办法打印函数的签名以调试问题? (我试过tipeof(f)但没有返回所需的信息)。
  3. 您是否知道调试这些签名不匹配问题的实用方法?

提前致谢。

答案

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

julia> transpose([1,2,3])
1×3 RowVector{Int64,Array{Int64,1}}:
 1  2  3

并在朱莉娅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之间的内容上打印警告。

以上是关于函数不匹配语言版本迁移中的参数,以及如何知道函数的签名的主要内容,如果未能解决你的问题,请参考以下文章

postgresql 的 crypt() 函数如何知道密码与存储的密码匹配?

如何检查检查PInvoke签名的调用约定和参数与非托管的目标签名是不是匹配?

将重载函数与其多态参数匹配

易语言如何编写一个DLL文件

如何查看DLL中的函数名及参数

经典问题解析五