Я делаю CLI, у которого есть 100 объектов, у каждого есть имя, и я хотел бы создать опцию для поиска в моем списке из 100 объектов, чтобы найти объект по имени. Какую реализацию лучше всего использовать здесь.
Для начала я предполагаю, что в Ruby я могу использовать .find? Мой текущий WIP ниже. Любая помощь приветствуется.
class PokeDEXCLI::Pokemon
attr_accessor :name, :id, :height, :weight
@@all = []
def initialize(attr_hash)
attr_hash.each do |key, value|
self.send("#{key}=", value) if self.respond_to?("#{key}=")
end
self.save
end
def save
@@all << self
end
def self.all
@@all
end
end
Я думал, что я могу искать по вводу, чтобы найти, выполнив сначала что-то подобное?
def self.find_by_name(input)
puts " Would you like to search by pokemon name? Please type in your query."
input = gets.chomp
if @@all.include? input
(this is where I am unsure how to compare input to the :name attribute)
end
Так что я думаю, что я буду использовать приведенный ниже фрагмент. Мой другой вопрос: могу ли я добавить аргумент по умолчанию для name, чтобы он возвращал nil, если совпадений нет?
class Pokemon
def self.find_by_name(name = nil)
@@all.select { |pokemon| pokemon.name.include?(name) }
end
end