Julia N个长元组作为可选参数
我希望将Julia N个长元组作为可选参数,julia,Julia,我希望将N长元组作为函数的可选参数,但我不知道如何提供N长默认值: function create_grid(d::Int64, n::Tuple{Vararg{Int64, N}}; xmin::Tuple{Vararg{Float64, N}}) where N 我理解xmin应该用默认值声明,比如xmin::Tuple{Vararg{Float64,N}}::0.,但这显然是错误的,因为它默认为Float,而不是Tuple。如果没有明确提供参数,我如何声明我想要一个N长元组作为可选参数,
N
长元组作为函数的可选参数,但我不知道如何提供N
长默认值:
function create_grid(d::Int64, n::Tuple{Vararg{Int64, N}}; xmin::Tuple{Vararg{Float64, N}}) where N
我理解
xmin
应该用默认值声明,比如xmin::Tuple{Vararg{Float64,N}}::0.
,但这显然是错误的,因为它默认为Float
,而不是Tuple
。如果没有明确提供参数,我如何声明我想要一个N
长元组作为可选参数,默认值为(例如)0.
,用于所有元素?这里是-您只需将默认值作为一个元素元组提供:
function somefun(d::Int64, n::Tuple{Vararg{Int64, N}}; xmin::Tuple{Vararg{Float64, N}}=(0.0,)) where N
println("d=$d n=$n xmin=$xmin")
end
要了解其工作原理,请注意:
Tuple{Vararg{Int, 2}} == typeof((2,2))
#and
Tuple{Vararg{Int, 1}} == typeof((2,))
所以您需要1元素元组作为默认值
让我们测试一下:
julia> somefun(4,(4,))
d=4 n=(4,) xmin=(0.0,)
这正如预期的那样有效
最后,请注意,提供2元素元组作为第二个参数而不提供第三个参数将引发错误,因为大小不匹配:
julia> somefun(4,(4,5))
ERROR: MethodError: no method matching #somefun#1(::Tuple{Float64}, ::typeof(somefun), ::Int64, ::Tuple{Int64,Int64})
如果要解决此问题,需要另一个构造函数:
function somefun(d::Int64, n::Tuple{Vararg{Int64, N}}; xmin::Tuple{Vararg{Float64, N}}= tuple(zeros(length(n))...)) where N
println("d=$d n=$n xmin=$xmin")
end
测试:
julia> somefun(4,(4,5))
d=4 n=(4, 5) xmin=(0.0, 0.0)
问题是我希望能够调用
somefun(4,(4,5))
,而不调用xmin
,然后默认情况下xmin
应该是函数中的(0,0.)
。这就是我在问题中所解释的。