2017-02-28 66 views
3

说我有一个函数,如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)但这似乎是太多的代码重复。

回答

5

这很好。请注意,可选参数会导致分派。这意味着if y == nothing(或等效地,if typeof(y) <: Void)将实际编译。你会得到两个不同的函数,这取决于用户是否给出一个值。所以最后,if声明编译完成,这样做效率非常高。

我会注意到,关键字参数现在也不是这样。

另一种方式来做到这一点是有两种方法:

f(x) 

f(x,y) 

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

+0

谢谢!您的版本是否检查y是否没有更好的/首选的方式? – ChrKroer

+0

我相信'y == Nothing'是检查值会被编译掉的一种情况,因为'nothing'的唯一方法是使用'typeof(y)<:Void'。但是如果你总是使用类型检查,你可以知道在类型稳定的函数中它们会被编译掉。这个事实很安全。这是因为类型稳定的函数肯定会知道类型,但不一定是值。 '虚空'是不同的,虽然 –

+0

我敢肯定这种方式是好的,但问题是什么是首选的方式,首选的方式通常(但不是总是)定义两个单独的方法'f(x)'和' f(x,y)'。特别是如果它使代码更清洁。 – DNF