Ruby三元 - 警告:条件中的字符串文字

时间:2014-01-30 19:50:18

标签: ruby ternary-operator

此代码按预期工作:

if phrase.last.eql? "?" ? true : false
  true
else 
  false
end

但是这段代码使用Ruby三元运算符:

phrase.last.eql? "?" ? true : false

给出以下错误:

  

警告:条件

中的字符串文字

我是否需要以某种方式逃避"?"

2 个答案:

答案 0 :(得分:8)

没有括号,ruby将其解释为

phrase.last.eql?( "?" ? true : false )

解释了消息“warning:string literal in condition”。

要解决此问题,请在参数:

上使用括号
phrase.last.eql?("?") ? true : false

当然,在这种情况下,使用三元运算符是多余的,因为这与简单的

相同
phrase.last.eql?("?")

答案 1 :(得分:3)

写如下:

phrase.last.eql?("?") ? true : false

示例:

2.0.0-p0 :023 > x = "a"
 => "a" 
2.0.0-p0 :024 > x.eql? "?" ? 1 : 2
(irb):24: warning: string literal in condition
 => false 
2.0.0-p0 :025 > x.eql?("?") ? 1 : 2
 => 2 
2.0.0-p0 :026 > 

否则x.eql? "?" ? 1 : 2被解释为x.eql?("?" ? 1 : 2)。现在在Ruby中除了nilfalse,所有对象都是true。因此,此处"?" ? 1 : 2"?"始终为true,因此您会收到警告。在条件测试中放置永远真值没有任何意义,并且同样的警告将被抛出给Ruby解释器。