我是Ruby的新手,我在遵循Ruby的Poignant指南时遇到了问题:
这个表达式是否返回true?
2005..2009 === 2007
但我不知道为什么我从以下代码
收到此警告消息wishTraditional.rb:4: warning: integer literal in conditional range
代码:
def makTimeLine(year)
if 1984 === year
"Born."
elsif 2005..2009 === year
"Sias."
else
"Sleeping"
end
end
puts makTimeLine(2007)
并且它返回睡眠,这是错误的,应该是Sias
BTW这两个点是什么意思?如何找到有关它的更多信息?
答案 0 :(得分:11)
我认为你最好使用类似的东西:
elsif (2005..2009).include?(year)
以下是有关Ruby ranges
的文档更新:如果您坚持使用===,则应将范围括在括号中:
elseif (2005..2009) === year
答案 1 :(得分:3)
对于独立表达式,是的,您需要将范围文字放在括号中。 但是if / elsif链作为case语句更清晰,它使用===进行比较:
def makTimeLine(year)
case year
when 1984
"Born."
when 2005..2009
"Sias."
else
"Sleeping"
end
end