2013-05-12 49 views
1

如何定義Thread#initialize?我嘗試以下:定義`Thread#initialize`

(1)

class Thread 
    def initialize 
    super 
    @foo = [] 
    end 
end 
Thread.new{}.join 

(2)

class Thread 
    def initialize &pr 
    super(&pr) 
    @foo = [] 
    end 
end 
Thread.new{}.join 

(3)

class Thread 
    def initialize 
    end 
end 
Thread.new{}.join 

但是它們返回一個錯誤:

Uninitialized thread - check `Thread#initialize'. 
+0

你不應該重寫默認主題#初始化。如果你只是使用內置方法會發生什麼? – echristopherson 2013-05-12 17:47:25

回答

2

以這種方式打開類時,您正在銷燬原始的Thread.initialize,對super的調用是Object.initialize,而不是之前在Thread.initialize中的內容。

它類似於這裏發生了什麼:

class Dog 
    def initialize 
    puts 'Arf' 
    end 
end 

class Dog 
    def initialize 
    super 
    puts 'I did not arf' 
    end 
end 
#dog.new "I did not arf" 

你可以繼承主題,然後用超,或者你可以使用alias_method

class Thread 
    alias_method :old_initialize, :initialize 
    def initialize(*args,&blk) 
    puts 'Before initialize' 
    old_initialize(*args,&blk) 
    end 
end 
+0

謝謝,這很好。 – sawa 2013-05-15 00:59:54