在Julia中输入的kwargs

时间:2016-08-31 04:01:08

标签: types julia variadic-functions kwargs

是否可以在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})

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更像是列表或数组。