1

我的红宝石代码中有这个简单的条件:

if user.text != ("Empty" || "Damaged")

做一点事...

问题是当它“损坏”时它仍然进入循环,所以我必须使用这个:

if user.text != "Empty"
    if user.text != "Damaged"
...
..

使第一个工作的正确语法是什么?谢谢!

4

3 回答 3

6

用这个:

unless ["Empty", "Damaged"].include?(user.text)
  ...
end

您的第一种方法的问题a || b在于:如果a != nil它是a,则它是b。如您所见,它适用于变量,而不是常量,因为它们很少为零。你的表达式("Empty" || "Damaged")简单地等于"Empty"

您想使用 this 作为二元运算符,正确的形式是:

if (user.text != "Empty") && (user.text != "Damaged")

上面的解决方案更短。它由您要避免的元素数组组成,您只需检查其中user.text是否不存在。

于 2012-08-26T17:15:49.537 回答
2

@Matzi 肯定有正确的答案。但这就是您正在做的事情失败的原因:

您的陈述("Empty" || "Damaged")评估为“空”

您是说返回其中任何一个,无论您首先找到哪个非错误的东西。在 Ruby 中,任何字符串、数字或对象都返回 true,因此每次都返回“Empty”。

如果您真的想使用 if 语句,一种更好的布局方式:

if user.text != "Empty" && user.text != "Damaged"
  ...
end

顺便说一句,我假设您想说“如果用户文本既不是损坏也不是空的”。

希望有帮助。

于 2012-08-26T17:28:45.577 回答
0

if ((text != "Empty") && (text != "Damaged"))

于 2012-08-26T17:19:57.927 回答