是否可以在Julia中输入函数kwargs?
以下适用于标准Vararg
。
function int_args(args::Integer...)
args
end
int_args(1, 2, 3)
# (1, 2, 3)
int_args(1, 2, 3.0)
# ERROR: MethodError: `int_args` has no method matching int_args(::Int64, ::Int64, ::Float64)
但是,当将相同的语法应用于kwargs时,所有函数调用似乎都是错误的。
function int_kwargs(; kwargs::Integer...)
kwargs
end
int_kwargs(x=1, y=2)
# ERROR: MethodError: `__int_kwargs#0__` has no method matching __int_kwargs#0__(::Array{Any,1})
答案 0 :(得分:9)
普通关键字参数可以有类型,如function f(x; a::Int=0)
中所示,但这并不适用于"休息"关键字参数。另请注意,由于我们目前不会对关键字参数进行调度,因此在这种情况下a::Int
是类型断言而不是调度规范。
看起来这种情况处理得不好,至少需要更好的错误信息。我们鼓励您在https://github.com/JuliaLang/julia/issues提交问题。
我不确定语法x::T...
对于关键字参数应该是什么意思。对于varargs,很明显x
的每个元素都应该有T
类型,但对于rest关键字参数,每个元素实际上都是符号 - 值对。当然,我们可以给它你描述的含义(所有值都有类型T
),但这似乎并不经常出现。关键字参数往往是异构的,不像varargs更像是列表或数组。