使用下面的第一行代码,我收到两条警告消息:warning: string literal in condition
x2
if input == "N" || "n"
#do this
else input == "L" || "l"
#do this
与使用此方法相反,它不会导致任何警告
if input == "N" || input == "n"
#do this
else input == "L" || input == "l"
#do this
我想知道为什么第一部分代码会导致警告,以及使用它的不利之处。
更改input == "N" || "n"
to
input == "N" || input == "n"
您还必须使用else if
而不是else
警告是说,您有一个字符串文字'n'而不是布尔值或测试,该字符串文字的值始终为true。
我和您有相同的错误,但有不同的问题,通过Google发现此问题,不妨为下一位Google员工发布我的解决方案。
我的代码中有错别字,也给出了相同的警告:
if input =! "N"
当然是正确的方法:
if input != "N"
[当您编写input == "N" || "n"
(时,Ruby内部会看到它(input == "N") || "n"
),这意味着"n"
字符串对象始终是真值。因为在Ruby中,每个对象都是true
,除了nil
和[C0 ]。Ruby解释器警告您,条件检查永远不会指向真实的值。条件检查语句始终期望相等/不相等测试类型的表达。现在您可以继续这种方式或重新考虑。 false
不会发出任何警告,因为它遵循条件测试的规范。
if input == "N" || input == "n"
是错误的,因为else语句不期望任何条件测试表达式。将其更改为else input == "L" || "l"
我也在寻找这个问题的答案,并感谢一位朋友找到了其他解决方案。
1)更改输入的大小写,因此您只需进行一项测试:
elseif input == "L" || "l"
2)对输入数据进行更复杂的检查:
if input.downcase == "n"
第二个选项提供了更大的灵活性,尤其是当您要寻找的条目组时。
希望我发现的东西可以帮助他人。