警告:条件中的字符串文字

问题描述 投票:18回答:4

使用下面的第一行代码,我收到两条警告消息:warning: string literal in conditionx2

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

我想知道为什么第一部分代码会导致警告,以及使用它的不利之处。

ruby
4个回答
28
投票

更改input == "N" || "n"

to

input == "N" || input == "n"

您还必须使用else if而不是else

警告是说,您有一个字符串文字'n'而不是布尔值或测试,该字符串文字的值始终为true。


1
投票

我和您有相同的错误,但有不同的问题,通过Google发现此问题,不妨为下一位Google员工发布我的解决方案。

我的代码中有错别字,也给出了相同的警告:

if input =! "N"

当然是正确的方法:

if input != "N"

1
投票

[当您编写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
投票

我也在寻找这个问题的答案,并感谢一位朋友找到了其他解决方案。

1)更改输入的大小写,因此您只需进行一项测试:

elseif input == "L" || "l"

2)对输入数据进行更复杂的检查:

if input.downcase == "n"

第二个选项提供了更大的灵活性,尤其是当您要寻找的条目组时。

希望我发现的东西可以帮助他人。

© www.soinside.com 2019 - 2024. All rights reserved.