我的红宝石代码中有这个简单的条件:
if user.text != ("Empty" || "Damaged")
做一点事...
问题是当它“损坏”时它仍然进入循环,所以我必须使用这个:
if user.text != "Empty"
if user.text != "Damaged"
...
..
使第一个工作的正确语法是什么?谢谢!
我的红宝石代码中有这个简单的条件:
if user.text != ("Empty" || "Damaged")
做一点事...
问题是当它“损坏”时它仍然进入循环,所以我必须使用这个:
if user.text != "Empty"
if user.text != "Damaged"
...
..
使第一个工作的正确语法是什么?谢谢!
用这个:
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
是否不存在。
@Matzi 肯定有正确的答案。但这就是您正在做的事情失败的原因:
您的陈述("Empty" || "Damaged")
评估为“空”
您是说返回其中任何一个,无论您首先找到哪个非错误的东西。在 Ruby 中,任何字符串、数字或对象都返回 true,因此每次都返回“Empty”。
如果您真的想使用 if 语句,一种更好的布局方式:
if user.text != "Empty" && user.text != "Damaged"
...
end
顺便说一句,我假设您想说“如果用户文本既不是损坏也不是空的”。
希望有帮助。
if ((text != "Empty") && (text != "Damaged"))