У меня есть класс, Фу.Я хочу иметь возможность передать конструктору экземпляр Foo, foo и получить тот же экземпляр обратно.
Другими словами, я хочу, чтобы этот тест прошел:
class Foo; end
foo = Foo.new
bar = Foo.new(foo)
assert_equal foo, bar
Кто-нибудь знаеткак я могу это сделать?Я пробовал это:
class Foo
def initialize(arg = nil)
return arg if arg
end
end
foo = Foo.new
bar = Foo.new(foo)
assert_equal foo, bar # => fails
, но это не работает.
Справка?
РЕДАКТИРОВАТЬ
Потому что числолюдей спросили мое обоснование:
Я делаю быстрый анализ большого количества данных (много ТБ), и у меня будет много экземпляров множества объектов.Для некоторых из этих объектов не имеет смысла иметь два разных экземпляра с одинаковыми данными.Например, один такой объект является объектом «окна» (как во временном окне), который имеет два свойства: время начала и время окончания.Я хочу иметь возможность использовать конструктор любым из этих способов и получить объект окна обратно:
window = Window.new(time_a, time_b)
window = Window.new([time_a, time_b])
window = Window.new(seconds_since_epoch_a, seconds_since_epoch_b)
window = Window.new(window_obj)
window = Window.new(end => time_b, start => time_a)
...
Некоторые другие объекты, которым требуется окно, могут быть созданы таким образом:
obj = SomeObj.new(data => my_data, window => window_arg)
Я не обязательно знаю, что находится в window_arg, и мне все равно - он примет любой отдельный аргумент, который может быть интерпретирован конструктором Window.Если у меня уже есть экземпляр Window, я бы предпочел просто использовать этот экземпляр.Но работа по интерпретации, которая кажется заботой конструктора Window.Во всяком случае, как я уже говорил, я перетаскиваю много ТБ данных и создаю множество экземпляров вещей.Если объект окна передается вокруг, я хочу, чтобы он просто распознавался как объект окна и использовался.