在Ruby中传递nil的方法默认参数

时间:2013-10-23 14:03:04

标签: ruby

我有这个:

def foo(a=3, b=6)
  puts a+b
end

但我称之为:

foo(params[:a], params[:b])

如果params在那里这很好但是如果它们不存在并且它被调用:

foo(nil,nil) 

然后默认值3和6未设置,并且它为nil类抛出undef方法'+'的错误

我的问题是,即使将nil传递给方法,是否有办法为方法设置默认值。因此,如果用户告诉你没有,你会说'搞砸你!'反正给他3个。

这不是一个好主意,我意识到,但我只是好奇。

1 个答案:

答案 0 :(得分:2)

不是在方法签名中使用默认值,而是可以使用||=复合赋值运算符仅在变量在布尔上下文中求值为nil或false时分配值,就像在取消设置时一样。例如:

def foo a, b
  a ||= 3
  b ||= 6
  puts a + b
end