以下の「クレイジーネス」への実用的なアプリケーションはありますか?
これは、ted
常に自分自身を世界に戻すことができる方法のようであり、人々はted
、特定の行動と特定の年齢になることを期待している人と話していると思うでしょう...しかし、彼はそのように行動していません.彼は自分自身を描写し、誰かに自分の年齢について嘘をついています.
オブジェクトが返されたときにどのような「トリック」が可能であり、そのオブジェクトが何を表し、何ができるかを確認します...しかし、実際には、そのオブジェクトは別の方法で動作し、戻る前に他のことができました。
class Person
def age
21
end
def who_am_i?
puts "I am #{self} / #{object_id} and I am #{age} years old"
self
end
end
ted = Person.new
def ted.singleton_who_am_i?
class << self
def age
0
end
end
puts "I am #{self} / #{object_id} and I am #{age} years old"
self
end
puts ted.who_am_i? == ted.singleton_who_am_i?
>> I am #<Person:0x100138340> / 2148123040 and I am 21 years old
>> I am #<Person:0x100138340> / 2148123040 and I am 0 years old
>> true