使用下面的第一位代码,我收到两条警告消息:
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
我想知道为什么第一位代码导致警告,以及使用它的缺点。
答案 0 :(得分:27)
更改input == "N" || "n"
到
input == "N" || input== "n"
您还必须使用else if
代替else
警告说,你有一个字符串文字'n',而不是布尔或测试,它总是评估为真。
答案 1 :(得分:1)
当您编写input == "N" || "n"
时(内部Ruby看到它(input == "N") || "n"
),这意味着"n"
字符串对象始终是真值。因为在Ruby中,每个对象都是{{1}除了true
和nil
之外,Ruby解释器被警告你没有意义将条件检查放在真正的值上。条件检查语句总是期望等式/不等式测试表达式。现在你可以继续这种方式或重新思考。 false
不会发出任何警告,因为它遵守条件测试的规范。
if input == "N" || input == "n"
是错误的,因为else语句不期望任何条件测试表达式。将其更改为else input == "L" || "l"
答案 2 :(得分:1)
我遇到了与您相同的错误,但是一个不同的问题,通过Google发现这个问题也可以发布我的下一个Google员工的解决方案。
我的代码中有一个拼写错误,它也会发出相同的警告:
if input =! "N"
当然是正确的方式:
if input != "N"
答案 3 :(得分:1)
我也在寻找这个问题的答案,感谢朋友找到了其他一些解决方案。
1)更改输入的大小写,因此您只需进行一次测试:
if input.downcase == "n"
2)对输入数据使用更复杂的检查:
if %w{n N}.include?(input) or
if ['n', 'N'].include?(input)
第二个允许您更灵活地进行检查,特别是如果您正在寻找有一组条目。
希望我发现的能帮助他人。