0

我在这个问题下找到了这段代码,它检查是否有任何参数传递给方法:

def foo(bar = (bar_set = true; :baz))
  if bar_set
    # optional argument was supplied
  end
end

这个默认值的目的是; :baz什么,在什么情况下我会使用它?

4

1 回答 1

1

这个想法是= (bar_set = true; :baz)只有当一个值没有传递给bar参数时才会被评估。

在 Ruby 中,多个连续表达式的返回值是最后一个表达式的值。因此= (bar_set = true; :baz)将值分配truebar_set,然后设置:baz为 的值bar(因为括号中的代码将计算为:baz,它是最后一个表达式)。

如果传递了一个参数,bar_set则将是nil并且值bar将是给定的任何内容。

于 2015-08-14T21:44:22.620 回答