此代码按预期工作:
if phrase.last.eql? "?" ? true : false
true
else
false
end
但是这段代码使用Ruby三元运算符:
phrase.last.eql? "?" ? true : false
给出以下错误:
警告:条件
中的字符串文字
我是否需要以某种方式逃避"?"
?
答案 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中除了nil
和false
,所有对象都是true
。因此,此处"?" ? 1 : 2
,"?"
始终为true
,因此您会收到警告。在条件测试中放置永远真值,没有任何意义,并且同样的警告将被抛出给Ruby解释器。