假设我有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)
,但这似乎有太多的代码重复。
答案 0 :(得分:10)
这很好。请注意,可选参数会导致调度。这意味着if y == nothing
(或等效地,if typeof(y) <: Void
)将实际编译掉。您将获得两种不同的功能,这取决于用户是否给出了值。所以最后,if
语句会编译出来,这样做非常有效。
我会注意到关键字参数目前不是这样。
另一种方法是使用两种方法:
f(x)
和
f(x,y)
两种方法是否比使用if
的方法更好取决于问题。由于if
将使用类型信息进行编译,因此除了代码组织之外,这两种方法之间没有区别。