1

我该如何定义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'.
4

1 回答 1

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"

你可以继承 Thread 然后使用 super,或者你可以使用 alias_method

class Thread
   alias_method :old_initialize, :initialize
   def initialize(*args,&blk)
     puts 'Before initialize'
     old_initialize(*args,&blk)
   end
end   
于 2013-05-15T00:51:44.187 回答