1

当对象的实例扩展模块并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

更新:好的,所以一个对象和一个字符串可以工作,但为什么数字不工作?我明白了TypeError: can't define singleton

4

2 回答 2

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
于 2012-02-06T21:51:21.557 回答
0

您不能在 ruby​​ 中的 Fixnum 上定义单例,因为实际上只有一个(对于每个 Fixnum)。例如(在 IRB 中):

1.object_id
=> 3
1.object_id
=>3

与字符串不同,例如:

"panda".object_id
=> 78405050
"panda".object_id
=> 78383110

显然,具体数字会因您的系统而异。

这是有道理的,因为 73 的特定“实例”无法与 73 的任何其他“实例”不同(我松散地使用“实例”这个词,因为它并不是真正的实例——它们都是同一个对象)。

http://ruby-doc.org/core-1.9.3/Fixnum.html

于 2012-02-06T22:58:23.620 回答