首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby散列值真实性和符号

Ruby散列值真实性和符号
EN

Stack Overflow用户
提问于 2010-05-09 18:56:46
回答 2查看 169关注 0票数 0

谁能解释一下为什么在下面的代码中名为foo的变量仍然是true,即使在调用该方法时它被设置为false?为什么symbol版本的行为符合预期?

代码语言:javascript
运行
复制
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。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-09 19:02:42

这条线

代码语言:javascript
运行
复制
foo = options[:foo] || true

如果options[:foo]false,则可以重写为

代码语言:javascript
运行
复制
foo = false || true

这显然就是true

运算符||仅在第一个运算符在未定义时将采用假值(例如nil)时才能用作“除非已定义”运算符。在本例中,false是一个已定义的值,因此您不能像使用||那样使用它。试着这样重写它:

代码语言:javascript
运行
复制
foo = options.fetch(:foo, true)

它将返回:foo键的值,如果未设置,则返回true

票数 4
EN

Stack Overflow用户

发布于 2010-05-09 19:03:50

|是OR。您基本上要做的是将foo赋值为false || true。或者当两个选项中至少有一个为true时返回true,或者当这两个选项都为false时返回false。

或门真值表如下:

代码语言:javascript
运行
复制
INPUT1 | INPUT2 | OUTPUT
   0   |    0   |   0
   0   |    1   |   1
   1   |    0   |   1
   1   |    1   |   1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2797404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档