谁能解释一下为什么在下面的代码中名为foo的变量仍然是true,即使在调用该方法时它被设置为false?为什么symbol版本的行为符合预期?
def test(options = {})
  foo = options[:foo] || true
  bar = options[:bar] || :true
  puts "foo is #{foo}, bar is #{bar}"
end
>> test(:foo => false, :bar => :false)
foo is true, bar is false我只尝试过使用Ruby 1.8.7。
发布于 2010-05-09 19:02:42
这条线
foo = options[:foo] || true如果options[:foo]为false,则可以重写为
foo = false || true这显然就是true。
运算符||仅在第一个运算符在未定义时将采用假值(例如nil)时才能用作“除非已定义”运算符。在本例中,false是一个已定义的值,因此您不能像使用||那样使用它。试着这样重写它:
foo = options.fetch(:foo, true)它将返回:foo键的值,如果未设置,则返回true。
发布于 2010-05-09 19:03:50
|是OR。您基本上要做的是将foo赋值为false || true。或者当两个选项中至少有一个为true时返回true,或者当这两个选项都为false时返回false。
或门真值表如下:
INPUT1 | INPUT2 | OUTPUT
   0   |    0   |   0
   0   |    1   |   1
   1   |    0   |   1
   1   |    1   |   1https://stackoverflow.com/questions/2797404
复制相似问题