Comment puis-je modifier la valeur de retour d'un constructeur de classe dans Ruby?

J'ai une classe, Toto. Je veux être en mesure de passer le constructeur Foo exemple, foo et obtenir la même instance.

En d'autres termes, je veux que cette épreuve à passer:

class Foo; end

foo = Foo.new
bar = Foo.new(foo)

assert_equal foo, bar

Ce que quelqu'un sait comment je peux faire? J'ai essayé ceci:

class Foo
  def initialize(arg = nil)
    return arg if arg
  end
end

foo = Foo.new
bar = Foo.new(foo)

assert_equal foo, bar  # => fails

mais ça ne fonctionne pas.

Aider?

MODIFIER

Parce qu'un certain nombre de personnes ont demandé mon raisonnement:

Je suis en train de faire une analyse rapide de grandes quantités de données (de nombreux TB) et je vais avoir un grand nombre de cas de beaucoup d'objets. Pour certains de ces objets, il n'est pas logique d'avoir deux instances différentes avec les mêmes données. Par exemple, un tel objet est une "fenêtre" (comme dans la fenêtre temporelle) de l'objet qui a deux propriétés: l'heure de début et de fin des temps. Je veux être en mesure d'utiliser le constructeur de l'une des manières suivantes et obtenir un objet de la fenêtre dos:

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)
...

Un autre objet qui a besoin d'une fenêtre peut être instancié de cette façon:

obj = SomeObj.new(data => my_data, window => window_arg)

Je n'ai pas forcément savoir ce qui est dans window_arg, et je n'ai pas vraiment de soins -- il acceptera n'importe quel argument qui peut être interprété par le constructeur de Fenêtre. Dans le cas d'avoir déjà une Fenêtre de l'instance, je préfère suffit d'utiliser cette instance. Mais le travail d'interprétation qui semble être une préoccupation de la Fenêtre constructeur. De toute façon, comme je l'ai mentionné, je suis barattage travers plusieurs to de données et création d'un grand nombre d'instances de choses. Si un objet de la fenêtre passe autour de moi, je veux qu'il vient d'être reconnu comme un objet de la fenêtre et utilisé.

source d'informationauteur Sir Robert