0
我不確定這裏發生了什麼事情或者要問什麼,真的,所以我不得不寫一個例子。爲什麼TestClass#foo不按預期工作? (詳細信息和示例如下)
預期行爲:
- test.start稱爲
- FOO {欄}被稱爲啓動方法內
- 杆被稱爲每5秒,記錄每次的文件;它這樣做總共3次
一切正常,直到第3點。看看時間戳,foo.bar似乎每隔5秒調用一次,但它不輸出到文件,直到循環終止。實際上,它在15秒鐘後連續記錄到文件3次。
require 'logger'
module Logging
def logger
Logging.logger
end
def self.logger
@logger ||= Logger.new(STDOUT)
end
end
class TestClass
include Logging
def initialize delay, log_path
@delay = delay
@log_path = log_path
end
def start
File.delete @log_path if File.exist? @log_path
exit if fork
Process.setsid
exit if fork
Dir.chdir '/'
STDOUT.reopen(@log_path, 'a')
STDERR.reopen(@log_path, 'a')
foo { bar }
end
def foo &block
3.times do
yield
sleep @delay
end
end
def bar
logger.info(self.class.name) { "testing" }
end
end
test = TestClass.new(5, "#{Dir.pwd}/test.log")
test.start
有誰能告訴我我在做什麼錯嗎? foo方法在實際代碼中並不重複,就像它在這裏一樣。
非常感謝你。這解決了這個問題。 – voyager