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

时间:2016-12-19 19:27:02

标签: arguments metaprogramming julia keyword-argument type-stability

我正在写一个凸解算器,为了具体起见,假设它正在解决普通最小二乘:找到最小化|| 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函数中的正确大小向量。但这似乎是hacky和(我假设)混乱的类型稳定。

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

修改 它看起来像

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

会做到这一点。

1 个答案:

答案 0 :(得分:4)

似乎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