Похоже, вам нужен конкретный способ реализации этой функции. Но с точки зрения интерфейса в стиле ruby , я бы рекомендовал использовать метод Enumerable#find
. Таким образом, вы можете сказать
foo_container = [FooIndexer.new, ...]
foo_container.find{|x| x.a == 10}
, что очень похоже на ваш пример, за исключением скобок вместо скобок!
Позже, если вы обнаружите, что производительность очень плохая, возможно, вы захотите кэшировать или оптимизировать ее find
. Но, основываясь только на вашем вопросе, если вы посмотрите на это сейчас, вы будете оптимизировать слишком рано.
Enumerable
уже предоставляет множество таких вещей, поэтому у вас есть естественные расширения, такие как
foo_container.select{|x| x.a == 10} # Finds all instances.
foo_container.reject{|x| x.a == 10} # Finds the complementary set.