解释一下这个简单的ruby代码

时间:2014-08-29 12:34:59

标签: ruby

我是Ruby的新手。打印什么,为什么?

a = nil
b = 2
a ||= b
puts a

向我解释这个简单的代码。

3 个答案:

答案 0 :(得分:2)

打印

2,因为当左侧变量为||=nil时,false会将右侧值分配给左侧变量。 anil,因此2将分配给a。因此会打印2

答案 1 :(得分:1)

许多编程需要理解布尔逻辑,基本上是如何确定真值和假值,这是触发条件逻辑分支,循环等的原因。

考虑一下:

在Ruby中有真值和假值,它们具有相同的保留字truefalse(它实际上比这更深,但是在不同的时间。):< / p>

true # => true
false # => false

Ruby中只有nilfalse为false值,其他所有内容都为true。这与其他语言不同,例如Perl,它认为0''(空字符串)也是假的。但请记住,Ruby中只有nilfalse是错误的。

&#34; not&#34; truefalse的值(AKA,对立面)分别为falsetrue!(布尔&#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