【发布时间】:2014-04-23 14:30:17
【问题描述】:
我正在尝试创建一个类方法,它将在其他类方法周围放置一个超时包装器。
class FooBar
def self.slow_add(a,b,c)
sleep 1
a + b + c
end
LIST = [:slow_add]
class << self
LIST.each do |x|
alias_method "#{x}_without_timeout", "#{x}"
define_method("#{x}_with_timeout") do |*args|
timeout(4){self.send(x, *args)}
end
alias_method "#{x}", "#{x}_with_timeout"
end
end
end
但是,生成的超时方法总是超时,即使它们不应该:
2.0.0p353 :152 > FooBar.slow_add_without_timeout(1, 2, 3)
=> 6
2.0.0p353 :153 > FooBar.slow_add_with_timeout(1, 2, 3)
Timeout::Error: execution expired
...
...
2.0.0p353 :156 > FooBar.slow_add(1, 2, 3)
Timeout::Error: execution expired
...
...
感谢您的帮助。
【问题讨论】:
标签: ruby methods timeout metaprogramming alias