奇异的ruby逻辑&&;运算符结果
我在Pry玩的时候遇到了这样一个问题:奇异的ruby逻辑&&;运算符结果,ruby,comparison,logical-operators,Ruby,Comparison,Logical Operators,我在Pry玩的时候遇到了这样一个问题: 20] pry(main)> ('X' && 'O') == 'X' => false [22] pry(main)> ('O' && 'X') == 'X' => true 有了这个,我试图检查括号内的两个值是否与右边的值相同。 第二次的结果告诉我我遗漏了什么 它似乎返回了上一次比较的值('X'='X'),但我的印象是&&一旦发现第一个错误就会停止 我可以理解为什么顺序在一般情况下很重要,但我认为
20] pry(main)> ('X' && 'O') == 'X'
=> false
[22] pry(main)> ('O' && 'X') == 'X'
=> true
有了这个,我试图检查括号内的两个值是否与右边的值相同。
第二次的结果告诉我我遗漏了什么
它似乎返回了上一次比较的值('X'='X'),但我的印象是&&一旦发现第一个错误就会停止
我可以理解为什么顺序在一般情况下很重要,但我认为通过将它们包装在()中,它们将作为一个条件进行检查
但我的印象是&&一旦发现第一个错误就会停止
你说得对。但这两个例子中的任何一个都没有发生
在您的示例中,'O'
和'X'
都是字符串对象,具有真实值
在示例('X'&&'O')=='X'
,('X'&&'O')
给出“O”
,并将其与“X”
进行比较,这当然是错误的。因此,您得到了false
在另一个('O'和&'X')=='X'
,('O'和&'X')
给出“X”
,然后将其与“X”
进行比较,当然它应该是真的。因此,您在PRY
中得到了true
注意:在Ruby中,除了nil
和false
之外,所有对象都有truthy值
当使用&&
时,它将继续计算其所有表达式,直到得到一个计算为falsy的表达式
但我的印象是&&一旦发现第一个错误就会停止
你说得对。但这两个例子中的任何一个都没有发生
在您的示例中,'O'
和'X'
都是字符串对象,具有真实值
在示例('X'&&'O')=='X'
,('X'&&'O')
给出“O”
,并将其与“X”
进行比较,这当然是错误的。因此,您得到了false
在另一个('O'和&'X')=='X'
,('O'和&'X')
给出“X”
,然后将其与“X”
进行比较,当然它应该是真的。因此,您在PRY
中得到了true
注意:在Ruby中,除了nil
和false
之外,所有对象都有truthy值
当使用&
时,它将继续计算其所有表达式,直到得到一个计算结果为falsy的表达式。在ruby&&
中,和
将检查第一个值,如果它在那里,它将转到下一个值,第一个值false
或nil
它将返回该值
foo = :foo
bar = nil
a = foo and bar
# => nil
a
# => :foo
a = foo && bar
# => nil
a
# => nil
a = (foo and bar)
# => nil
a
# => nil
(a = foo) && bar
# => nil
a
# => :foo
> a = true && false
=> false
> a
=> false
> a = true and false
=> false
> a
=> true
在ruby和&
中,和
将检查第一个值,如果它在那里,它将转到下一个值,第一个值false
或nil
它将返回该值
foo = :foo
bar = nil
a = foo and bar
# => nil
a
# => :foo
a = foo && bar
# => nil
a
# => nil
a = (foo and bar)
# => nil
a
# => nil
(a = foo) && bar
# => nil
a
# => :foo
> a = true && false
=> false
> a
=> false
> a = true and false
=> false
> a
=> true
谢谢你,奥雅纳。我知道真实和虚假的价值观,我只是把操作搞混了:)谢谢奥雅纳。我知道真实和虚假的价值观,我只是把操作搞混了:)