Julia:具有Vector类型的可选参数的函数但默认为null?

Dom*_*ski 1 null arguments default function julia

我有一个功能f(x).我希望该函数具有vector类型的可选参数.例如,f(x; y::Vector=[1,2,3]).但是,我想将默认值设置为其他值(null?missing?void?),以便我可以轻松捕获它并对其作出反应.

在R中,我会说function(x, y=NULL){},然后if(is.null(y)){whatever}.

做朱利安最类似的做法是什么?

Bog*_*ski 5

Engineero在评论中引用的模式是最干净的,但它假设了一个位置参数.如果您坚持在函数中使用关键字参数(就像您在问题中所做的那样):

function f(x; y::Union{Vector, Nothing}=nothing)
    if y === nothing
        # do something
    else
        # do something else
    end
end
Run Code Online (Sandbox Code Playgroud)

这通常只有在你有很多关键字参数时才需要,否则我建议使用不同的位置参数签名来定义方法.

当然,nothing如果你发现它更可取的话,也可以将这个模式用于位置参数.

  • 它被移出到Nullables.jl包.简而言之:现在你有'没什么'是'Nothing`的单例实例,并且由于Julia 1.0的改进,推荐的样式是使用联合类型,如`Union {Int,Nothing}`然后`nothing`表示缺少值(因此有时你必须使用`Some`类型来区分缺少值和"nothing"是有效值的情况. (2认同)