Если вы ожидаете исключение при вызове метода :: new с повторяющимся аргументом, посмотрите ответ @ maxpleaner .
Но если вам нужна ссылка на объектчто вы создали ранее с этим аргументом, используйте другой способ:
class Name
@@names = {}
attr_accessor :name
def initialize(name)
@name = name
end
def self.new(name)
@@names[name] || @@names[name] = super
end
end
Теперь вы можете проверить это:
n1 = Name.new(1)
n2 = Name.new(2)
n2a = Name.new(2)
puts n1.object_id, n2.object_id, n2a.object_id
puts n2 == n2a
В моем случае это печатает:
5296300
5264360
5264360
true