В Ruby нет понятия «коллекции определенного объекта», но вы можете легко выполнить обезьяньё-исправление в методе на Array
, который работает, только когда все элементы в массиве относятся к вашему типу.
irb(main):001:0> class Foo
irb(main):002:1> def bar
irb(main):003:2> puts "bar"
irb(main):004:2> end
irb(main):005:1> end
=> nil
irb(main):006:0>
irb(main):007:0* class Array
irb(main):008:1> def collection_method
irb(main):009:2> raise "Not all Foo objects" unless self.all? { |x| x.instance_of? Foo }
irb(main):010:2> self[0].bar
irb(main):011:2> end
irb(main):012:1> end
=> nil
irb(main):013:0> [1,2,3].collection_method
RuntimeError: Not all Foo objects
from (irb):9:in `collection_method'
from (irb):13
from ♥:0
irb(main):014:0> [Foo.new, Foo.new].collection_method
bar
=> nil
Но это действительно идет вразрез с динамическим языком. Было бы более естественно просто опробовать его (что бы вы ни делали) и по мере возникновения исправлять ошибки.