2012-02-06 113 views
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

回答

0

不能定義在紅寶石一個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

+1

那麼如果只有一個數字'1',爲什麼我不能定義一個單例方法來給它賦予不同於數字'2'的專門行爲呢? :) Fixnums * do *擁有自己的ivars,我看不出他們爲什麼不能擁有自己的單身類:) – horseyguy 2012-02-07 01:43:39

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 
+0

怎麼樣的數字類型? – NebulaFox 2012-02-06 22:00:18