回答
很多编程需要理解布尔逻辑,基本上如何确定真值和假值,这是触发条件逻辑的原因分支,循环等
考虑一下:
Ruby中有真假值,其中有true
和false
相当于保留字(实际上远不止这一点,但认为更深层次的是对不同的时间。 ):
true # => true
false # => false
只有nil
和false
是Ruby的假值,其他一切都是true
。这不同于其他一些语言,如Perl,它认为0
和''
(空字符串)也是错误的。请记住,Ruby中只有nil
和false
是错误的。
的 “非” 值的true
和false
(AKA,对立)分别false
和true
。该!
(布尔“NOT”)运算符用于此:
!true # => false
!false # => true
现在,这是一招,你会看到高级程序员使用:NOT-ING他们两次返回其原始值的布尔版本:
!!true # => true
!!false # => false
这是一个重要的事情要了解。我们可以用值!!
除了true
/false
并确定它们是否是真的还是假的值:
!!'' # => true # !> string literal in condition
!!0 # => true # !> literal in condition
!!'foo' # => true # !> string literal in condition
!!1 # => true # !> literal in condition
Ruby是不是太高兴,我使用一个字面的测试,但你可以看到,上文全部为真,这些都是假的:
!!false # => false
!!nil # => false
希望你看到我们如何看待值的语言两种方式,无论他们是真/假和其实际价值是什么。
继续前进:
的||
(布尔 “OR”)着眼于左侧的价值第一。如果它是真的,它会返回该值。如果是假的,它看起来在右侧,并返回:
true || false # => true
false || true # => true
nil || 'foo' # => "foo"
false || 2 # => 2
的||=
运营商的行为类似,只有比较之后,它分配到左边的变量,如果它是一个假的类型值:
a = false
a ||= true
a # => true
a = true
a ||= false
a # => true
分配给变量,而不是直接对文字测试,结果类似的结果:
a = nil # => nil
!a # => true
!!a # => false
b = 2 # => 2
!b # => false
!!b # => true
多一点:
||=
用作速记取代的一点点if
/then
代码:
a = nil # => nil
b = 2 # => 2
if !a
a = b
end
a # => 2
a = 1 # => 1
b = 2 # => 2
if !a
a = b
end
a # => 1
而且所有通向该代码你想明白:
a = nil # => nil
b = 2 # => 2
a ||= b # => 2
哇,很好的回答! – Mischa 2014-08-31 15:57:04
2
被打印出来,因为||=
在左侧变量为nil
或false
时将右侧值赋给左侧变量。 a
是nil
,所以2
将被分配到a
。因此打印2
。
我相信||=
是说的简写方式, “如果a
是假的把它分配给......” 在这种情况下b
所以
a = nil
b = 2
a ||= b
puts a
> 2
和
a = 4
b = 2
a ||= b
puts a
> 4
这并不是说“如果a是零”,它是说“如果a是假的”。在Ruby中,零和“假”是错误的值,其他的都是“真”。 – 2014-08-29 15:36:05
@TheTinMan:感谢您的更正!完全正确。我已经更新了我的回答 – 2014-09-01 09:45:19
- 1. 解释红宝石代码片段
- 2. 红宝石阵列片,不能理解这个简单的代码片段
- 3. 有人可以向我解释这一点的代码(简单)
- 4. 逃逸红宝石代码
- 5. 重构我的红宝石叽叽喳喳宝石代码
- 6. 我dont't了解红宝石
- 7. 寻找一个简单的红宝石模板解决方案
- 8. 红宝石:从这个类
- 9. 请解释红宝石ARGF行为
- 10. 非常简单的DSL在红宝石
- 11. 红宝石NATS简单的发布
- 12. 红宝石简单的类问题
- 13. 简单的红宝石程序
- 14. 简单的拼写检查方法/宝石红宝石?
- 15. 如何解释这个简单的C代码的输出?
- 16. 解析红宝石
- 17. 解析红宝石
- 18. 解释这一红宝石数组语法
- 19. 需要解释这个简单的代码(js)ty!
- 20. 这个反衬红宝石代码是什么意思?
- 21. 如何让这个红宝石代码更干DRY
- 22. 红宝石错误与简单ActiveRecord.find
- 23. 我只想写一个简单μ在红宝石和虾
- 24. 了解这个简单的代码
- 25. 重构难看的红宝石代码
- 26. 里面的红宝石代码
- 27. 红宝石,Splat的源代码?
- 28. 转换红宝石+ JavaScript代码的CoffeeScript
- 29. 我的第一个红宝石测试代码有问题
- 30. 红宝石代表从可可开发人员背景解释
a || = b是a = a ||的简短手段b因为a是零(和falsy)b会打印出来2,只需打开irb并自己尝试。 – Doon 2014-08-29 12:40:58
这不是一个真正的Ruby问题,它是适用于所有语言的基本编程逻辑。一本好的编程教科书将会覆盖它。 – 2014-08-29 16:12:32