Ich finde es zutiefst seltsam, dass dies in Ruby möglich ist (ich werde nicht gleich sagen, wie):
obj = #code redacted
print obj.state # Some value.
LValue = obj
print obj.state # Different value!
Ihre Herausforderung besteht darin, Code ungefähr in dieser Form zu erstellen. Erstellen Sie ein Objekt und weisen Sie es einer Variablen zu. Es sollte ein definiertes Attribut (oder eine deterministische, idempotente Methode) wie state
oben haben, das sich ändert, nachdem das Objekt einem neuen Bezeichner ( LValue
oben) zugewiesen wurde , auch wenn Sie den alten Bezeichner ( obj
oben) weiterhin verwenden, um darauf zu verweisen.
Zur Hervorhebung bearbeiten : state
oder das Äquivalent muss idempotent sein. Die Erstellung eines Accessors, der den Wert ändert oder aus einem anderen Grund unterschiedliche Ergebnisse liefert, wenn er mehrmals hintereinander aufgerufen wird, ist keine gültige Lösung. Oder einfacher gesagt, es muss die Zuweisung sein, die den Zustand ändert.
Jede Sprache mit Zuweisung ist förderfähig, obwohl es wahrscheinlich einige gibt, für die es keine völlig legitime Lösung gibt. Ich werde meine Ruby-Antwort veröffentlichen, wenn sie nach ein paar Tagen niemand anderes erhält, und die Antworten mit den höchsten Stimmen fortlaufend annehmen.
(setq a (list "val")) (setq b (nconc a "val2"))
zum Beispiel. a
endet ("val" . "val2")
zu diesem Zeitpunkt zu bewerten .
LValue = obj
Leitung benötigt werden, umstate
sich tatsächlich zu ändern? (Ich könnte einfach eine Eigenschaft in C # erstellen, die jedes Mal erhöht wird, wenn Sie sie erhalten.)