【发布时间】:2014-11-12 07:53:52
【问题描述】:
我真的不明白这个Ruby Monk exercise:
在处理 singleton_method_added 和 method_added 时有一个重要的细微差别值得理解。
大脑对这两个回调采取的最自然的策略是假设method_added 将观察实例方法和singleton_method_added,类方法。然而,这并不完全正确。 Ruby 的单例对象支持普通对象并包含对象特定的更改。对于类,这些是类方法。但是,当向单个常规对象添加方法时,单独向该对象添加实例方法会修改该对象的单例对象。
让我通过让你解决这个练习来告诉你为什么。
练习是:
AN_OBJECT = Object.new
def AN_OBJECT.methods_added
@@methods_added ||= []
end
def AN_OBJECT.singleton_methods_added
@@singleton_methods_added ||= []
end
我的尝试是这样做:
def AN_OBJECT.methods_added
unless AN_OBJECT.is_a?(Class)
@@methods_added ||= []
end
end
def AN_OBJECT.singleton_methods_added
if AN_OBJECT.instance_of?(Object)
@@singleton_methods_added ||= []
end
end
但规格仍然失败。
我真的很难理解他们到底想让我做什么。什么是单例对象?据我了解,单例类是一种“元类”,其存在只是为了给类的某个实例提供行为。
单例对象是不是一种“元对象”,其存在只是为了给对象的某个实例提供行为?这让我很困惑。
【问题讨论】:
-
我认为这是书中的错字,应该改为“单例类”。
-
我明白了,感谢您的澄清!
-
@abustamam 你能通过测试了吗?
-
不,我承认我放弃了那个特定的任务。
标签: ruby