在Ruby中,为什么&&工作时间||不在我的示例代码中?

时间:2012-12-06 06:06:11

标签: ruby operators

在我的示例代码中,我试图替换'text'中与'redact'或'redact_again'匹配的任何单词。由于它是一个/或场景,我认为会使用||。事实证明&&确实有效。如果两者都匹配,则将其替换为“Redacted”一词。如果找不到匹配项,它只会重新打印“文本”。我只想了解为什么使用||在两个/或场景中都不起作用?

puts "Tell me a sentence"
text = gets.chomp.downcase
puts "Redact this word: "
redact = gets.chomp.downcase
puts "And redact another word: "
redact_another = gets.chomp.downcase

words = text.split(" ")
words.each do |x|
 if x != redact && x != redact_another
 print x + " "
 else
 print "REDACTED "
 end
end

2 个答案:

答案 0 :(得分:1)

以下应该工作

 if x == redact || x == redact_another
   print "REDACTED "
 else
   print x + " "
 end

OR

 print [redact, redact_another].include?(x) ? "REDACTED " : x + " "

答案 1 :(得分:0)

这是boolean条件导致这种情况发生。

布尔值为01

  • 使用&&时,BOTH变量必须1true
  • 使用||时,EITHER变量必须1true

反转逻辑意味着以下两个语句在逻辑上是正确的:

(x == redact || x == redact_another) == (if x != redact && x != redact_another)

妙的。