我是Ruby的新手。打印什么,为什么?
a = nil
b = 2
a ||= b
puts a
向我解释这个简单的代码。
答案 0 :(得分:2)
2
,因为当左侧变量为||=
或nil
时,false
会将右侧值分配给左侧变量。 a
为nil
,因此2
将分配给a
。因此会打印2
。
答案 1 :(得分:1)
许多编程需要理解布尔逻辑,基本上是如何确定真值和假值,这是触发条件逻辑分支,循环等的原因。
考虑一下:
在Ruby中有真值和假值,它们具有相同的保留字true
和false
(它实际上比这更深,但是在不同的时间。):< / p>
true # => true
false # => false
Ruby中只有nil
和false
为false值,其他所有内容都为true
。这与其他语言不同,例如Perl,它认为0
和''
(空字符串)也是假的。但请记住,Ruby中只有nil
和false
是错误的。
&#34; not&#34; true
和false
的值(AKA,对立面)分别为false
和true
。 !
(布尔&#34; NOT&#34;)运算符用于此:
!true # => false
!false # => true
现在,这是一个你会看到高级程序员使用的技巧:两次输入它们会返回原始值的布尔版本:
!!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
希望你看到我们如何用语言两种方式看待价值观,无论它们是真/假,还有它们的实际价值。
继续前进:
||
(布尔&#34; OR&#34;)首先查看左值。如果它为真,则返回该值。如果它是假的,它会查看右侧并返回:
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
答案 2 :(得分:0)
我认为||=
是一种简短的说法“如果a
为假,则将其分配给......”,在这种情况下b
所以
a = nil
b = 2
a ||= b
puts a
> 2
和
a = 4
b = 2
a ||= b
puts a
> 4