У меня есть класс Team
, который содержит метод класса find_team
. Метод возвращает Team
объекта, если он найден, или nil
, если объект не найден:Как условно назначить переменные Ruby экземплярам объектов
class Team
@@all_teams = []
def self.find_team(name)
index = @@all_teams.find_index { |t| t.name == name }
if index.nil?
nil
else
@@all_teams[index]
end
end
end
В реализации класса, мне нужно назначить переменную для правильного Team
объекта, если он существует, или создать новый Team
если это не так. Я изо всех сил стараюсь найти самый ясный, быстрый, нужный способ сделать это. Некоторые варианты я рассмотрел:
t1 = Team.find_team("Some Team") ? Team.find_team("Some Team") : Team.new("Some Team")
t2 = Team.find_team("Some Other Team")
t2 ||= Team.new("Some Other Team")
t3 = if Team.find_team("Another Team")
Team.find_team("Another Team")
else
Team.new("Another Team")
Я предпочитаю второй пример, так как это менее многословным и повторяющиеся, но мне интересно, если есть какая-то хитрость Руби я пропускаю в этом сценарии.
Для справки в будущем и Google это называется t он одиночный узор. – Doorknob
Я знаю, что Team.find_teams - это метод singleton, но этот класс также имеет множество методов экземпляра. В этом вопросе нет ничего особенного, особенно для синглтон-методов. –