Julia 中的类型化 kwargs
Typed kwargs in Julia
是否可以在 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})
普通关键字参数可以有类型,如 function f(x; a::Int=0)
,但这不适用于 "rest" 关键字参数。另请注意,由于我们目前不分派关键字参数,因此本例中的 a::Int
是类型断言而不是分派规范。
看来这个案例处理得不好,至少需要一个更好的错误信息。我鼓励您在 https://github.com/JuliaLang/julia/issues.
提交问题
我不确定语法 x::T...
对于关键字参数应该意味着什么。在可变参数的情况下,很明显 x
的每个元素都应该具有 T
类型,但对于 rest 关键字参数,每个元素实际上是一个符号值对。当然,我们可以赋予它您所描述的含义(所有值的类型都是 T
),但这似乎并不经常出现。与更像列表或数组的可变参数不同,关键字参数往往是多种多样的。
是否可以在 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})
普通关键字参数可以有类型,如 function f(x; a::Int=0)
,但这不适用于 "rest" 关键字参数。另请注意,由于我们目前不分派关键字参数,因此本例中的 a::Int
是类型断言而不是分派规范。
看来这个案例处理得不好,至少需要一个更好的错误信息。我鼓励您在 https://github.com/JuliaLang/julia/issues.
提交问题我不确定语法 x::T...
对于关键字参数应该意味着什么。在可变参数的情况下,很明显 x
的每个元素都应该具有 T
类型,但对于 rest 关键字参数,每个元素实际上是一个符号值对。当然,我们可以赋予它您所描述的含义(所有值的类型都是 T
),但这似乎并不经常出现。与更像列表或数组的可变参数不同,关键字参数往往是多种多样的。