警告:条件字符串文字

时间:2014-01-01 10:35:09

标签: ruby

使用下面的第一位代码,我收到两条警告消息: 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

我想知道为什么第一位代码导致警告,以及使用它的缺点。

4 个答案:

答案 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}除了truenil之外,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)

第二个允许您更灵活地进行检查,特别是如果您正在寻找有一组条目。

希望我发现的能帮助他人。