当一个对象的实例扩展一个模块并且在模块上调用了extended
时,base
是否已经扩展了模块?
module M
def self.extended base
# when this is called has base extended
end
def self.some_method
# that does something special ;)
end
end
obj = Object.new
obj.extend M
更新:好的,所以一个Object和一个String工作,但为什么数字不起作用?我得到TypeError: can't define singleton
答案 0 :(得分:0)
烨!
[1] pry(main)> module Foo
[1] pry(main)* def hi
[1] pry(main)* end
[1] pry(main)* def self.extended(base)
[1] pry(main)* base.hi
[1] pry(main)* end
[1] pry(main)* end
=> nil
[2] pry(main)> s = ""
=> ""
[3] pry(main)> s.extend(Foo)
=> ""
[4] pry(main)> quit
答案 1 :(得分:0)
你无法在ruby中的Fixnum上定义单例,因为实际上只有一个(对于每个Fixnum)。例如(在IRB中):
1.object_id
=> 3
1.object_id
=>3
与字符串不同,例如:
"panda".object_id
=> 78405050
"panda".object_id
=> 78383110
显然,具体数字会因您的系统而异。
这是有道理的,因为73的特定“实例”没有办法与73的任何其他“实例”不同(我松散地使用“实例”这个词,因为它实际上不是一个实例 - 它们都是同一个对象。)