下面的“疯狂”有实际应用吗?
似乎这是一种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