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.)
。这就是我在问题中所解释的。