假设我有一个功能,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将使用类型信息进行编译,因此除了代码组织之外,这两种方法之间没有区别.