文学作品如预期此代码:红宝石三元 - 警告:字符串条件
if phrase.last.eql? "?" ? true : false
true
else
false
end
但是这个代码使用Ruby三元运算符:
phrase.last.eql? "?" ? true : false
提供了以下错误:
warning: string literal in condition
我需要以某种方式逃避"?"
吗?
文学作品如预期此代码:红宝石三元 - 警告:字符串条件
if phrase.last.eql? "?" ? true : false
true
else
false
end
但是这个代码使用Ruby三元运算符:
phrase.last.eql? "?" ? true : false
提供了以下错误:
warning: string literal in condition
我需要以某种方式逃避"?"
吗?
没有括号,红宝石将其解释为
phrase.last.eql?("?" ? true : false)
这也解释了消息“警告:字符串字面条件”。
为了解决这个问题,使用括号的参数:
phrase.last.eql?("?") ? true : false
。当然,在这种情况下,使用三元运算符是多余的,因为这是相同的只是
phrase.last.eql?("?")
+1的清晰解释... – Snowcrash
写如下:
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解释器抛出。
甲提醒读者Ruby有三种方法测试相等性: 'puts“#{5 == 5.0},#{5.eql?(5.0)},#{5.equal?(5.0)}”#=> true false false '。 'true'是因为值相同,'false#1',因为值是不同的类型,即使它们是('=')相等,'false#2'是因为值有不同的'object_id'。 –