我有一个函数f(x)
。我希望该函数具有类型为vector的可选参数。例如,f(x; y::Vector=[1,2,3])
。但是,我希望默认值是其他值(空?缺少?无效?),以便我可以轻松地捕获它并对其作出反应。
在R中,我先说function(x, y=NULL){}
,然后说if(is.null(y)){whatever}
。
做类似事情的最朱利安方法是什么?
答案 0 :(得分:5)
Engineero在注释中引用的模式是最干净的,但是它假定一个位置自变量。如果您坚持要在函数中使用关键字参数(如您在问题中所做的那样),请使用:
function f(x; y::Union{Vector, Nothing}=nothing)
if y === nothing
# do something
else
# do something else
end
end
通常只有在您有很多关键字参数时才需要这样做,否则我建议您定义具有不同位置参数签名的方法。
当然,如果可以使用此模式,也可以将nothing
与该模式一起用于位置参数。