Ruby中的整数范围

时间:2010-11-17 11:19:27

标签: ruby

我是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这两个点是什么意思?如何找到有关它的更多信息?

2 个答案:

答案 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