可选参数的Julia约定

Chr*_*oer 6 julia

假设我有一个功能,f(x,y)y参数是可选的.设置y为可选参数的首选方法是什么?一个适合我的选择:

function f(x, y=nothing)
    # do stuff 
    if y == nothing
        # do stuff
    else
        # do stuff
    end
    # do stuff
end
Run Code Online (Sandbox Code Playgroud)

但这是首选方式吗?我无法将y单个默认值设置为在计算中使用,因为有许多计算在y没有任何情况时以不同方式完成.我也可以只有单独的功能f(x),f(x,y)但这似乎是太多的代码重复.

Chr*_*kas 10

这可以.请注意,可选参数会导致调度.这意味着if y == nothing(或等效地if typeof(y) <: Void)将实际编译掉.您将获得两个不同的功能,这取决于用户是否给出值.所以最后,if语句汇编起来,这样做非常有效.

我会注意到关键字参数目前不是这样.

另一种方法是使用两种方法:

f(x)
Run Code Online (Sandbox Code Playgroud)

f(x,y)
Run Code Online (Sandbox Code Playgroud)

两种方法是否比一种方法更好if取决于问题.由于if将使用类型信息进行编译,因此除了代码组织之外,这两种方法之间没有区别.