Есть ли краткий способ вернуть числовой итератор в цикл в Ruby? - PullRequest
0 голосов
/ 15 ноября 2011

Похоже, должен быть однострочный способ перебора по season и возврата последнего season, когда show.has_season? оценивается как false.

def last_season(show)
  season = 1
  season += 1 while show.has_season?(season)
  return season
end

Редактировать: has_season? включает в себя HTTP-вызов GET, поэтому я не могу понять, как правильно использовать его.

Ответы [ 3 ]

5 голосов
/ 15 ноября 2011

То, что вы делаете, является своего рода окольным способом получения ответа.Что делает метод has_season??Имеет ли смысл, чтобы у вашего шоу-объекта было множество сезонов?Тогда вы можете просто сделать что-то вроде:

class Show
  attr_accessor :seasons

  def initialize
    @seasons = []
  end

  def last_season
    seasons.last
  end
end

show = Show.new
show.seasons = [1,2,3,4,5,6]
show.last_season # => 6
1 голос
/ 15 ноября 2011

Одним из решений было бы использовать что-то вроде этого:

def last_season(show)
  (1..1.0/0.0).find {|season| not show.has_season?(season)|
end

Но я чувствую, что класс, представляющий show, должен обеспечить этот last_season метод, и, вероятно, существует способ его вычислениябез грубой силы через возможное количество сезонов.

0 голосов
/ 15 ноября 2011

Чтобы шоу отреагировало на has_season?, оно уже должно знать свои сезоны.

Метод last_season? должен быть частью класса Show. Show будет иметь перечисление или max_season -подобное значение и должно просто возвращать самое высокое значение или максимальное время года.

...