Целочисленный диапазон в Ruby - PullRequest
4 голосов
/ 17 ноября 2010

Я новичок в Ruby, у меня возникла проблема после Poignant Guide to Ruby:

Возвращает ли это выражение значение 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)

и оно возвращает Sleeping, что неправильно и должно быть Sias

Кстати, что означают две точки? Как я могу найти больше информации об этом?

Ответы [ 2 ]

11 голосов
/ 17 ноября 2010

Я думаю, вам лучше использовать что-то подобное:

elsif (2005..2009).include?(year)

Вот документация о Рубиновых диапазонах

Обновление: если вы настаиваете на использовании ===, вы должны заключить диапазон в скобки:

elseif (2005..2009) === year
3 голосов
/ 20 апреля 2011

Для независимых выражений да, вам нужно поместить литералы диапазона в круглые скобки. Но ваша цепочка if / elsif будет более чистой в качестве оператора case, который использует === для сравнения:

def makTimeLine(year)
  case year
  when 1984
    "Born."
  when 2005..2009
    "Sias."
  else
    "Sleeping"
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...