Julia 中可变大小的关键字参数

Variable sized keyword arguments in Julia

我正在写一个凸求解器,为了具体起见,假设它正在求解普通最小二乘法:找到最小化 ||b-Ax||^2 的 x。所以我的函数调用看起来像

x = optim(A, b)

我希望能够在有用时使用热启动,以提供对解决方案的良好初步猜测。所以像

x = optim(A, b; w=some_starting_value)

我的问题是,如果我想使用默认值,some_starting_value 的长度必须等于 A 中的列数,这是由用户选择的。在 R 中可以做类似

的事情
x = optim(A, b; w=ncols(A))

Julia 中是否存在任何类似的功能?我目前的解决方案是做类似

的事情

x = optim(A, b; w=0)

然后检查 w != 0 并在 optim 函数中将其设置为正确大小的向量。但这似乎很老套,而且(我认为)扰乱了类型稳定性。

是否有一种简洁的方法来指定其大小取决于所需参数的关键字参数?

编辑 看起来像

function foo{T<:Real}(A::Array{T,2}; w=zeros(T,size(x,2)))
    println("$x")
    println("$y")
end

会成功的。

看来 Julia 中的默认参数可以是包含其他参数值的表达式:

julia> a(x, y=2*x) = println("$x, $y")
a (generic function with 2 methods)

julia> a(10)
10, 20

此外,默认参数表达式可以调用其他函数:

julia> b(x) = sqrt(x)
b (generic function with 1 method)

julia> a(x, y=b(x)) = println("$x, $y")
a (generic function with 2 methods)

julia> a(100)
100, 10.0