可选参数的Julia约定

时间:2017-02-28 03:14:27

标签: 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

但这是首选方式吗?我无法将y设置为单个默认值以用于计算,因为当y为空时,有许多计算以不同方式完成。我也可以只使用单独的函数f(x)f(x,y),但这似乎有太多的代码重复。

1 个答案:

答案 0 :(得分:10)

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

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

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

f(x)

f(x,y)

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