Types 朱丽娅·克瓦格斯

Types 朱丽娅·克瓦格斯,types,julia,variadic-functions,keyword-argument,Types,Julia,Variadic Functions,Keyword Argument,可以在Julia中键入函数kwargs吗 以下内容适用于标准Varargs 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应用相同的

可以在Julia中键入函数kwargs吗

以下内容适用于标准
Vararg
s

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})

普通关键字参数可以有类型,如在函数f(x;a::Int=0)中,但这不适用于“rest”关键字参数。还要注意的是,由于我们目前没有对关键字参数进行分派,因此本例中的
a::Int
是一个类型断言,而不是分派规范

看起来这个案例处理得不好,至少需要一条更好的错误消息。我鼓励你在上提交一个问题


我不确定关键字参数的语法
x::T..
应该是什么意思。对于varargs,很明显
x
的每个元素都应该具有类型
T
,但是对于rest关键字参数,每个元素实际上是一个符号-值对。当然,我们可以给出您描述的含义(所有值的类型都是
T
),但这似乎并不经常出现。关键字参数往往非常异构,不像varargs更像列表或数组。

我将提出一个问题。谢谢大家!@2问,你最后提出问题了吗?我自己也遇到了同样的困惑。