在我的ruby项目中,我想创建一个任务管理器类,该类将定期迭代一系列已注册的函数。我需要将函数作为参数传递给寄存器函数,创建一个线程,并且当线程计时器启动时,它需要调用数组中的每个函数。
class TaskMan
@@func_array = Array.new
def self.register_func &arg_func
@@func_array.push arg_func
end
def self.run_server
loop do
@@func_array.each do |func|
func.call
end
sleep 60
end
end
end
class Callee
def self.func_0
puts "func_0 called."
end
def self.func_1
puts "func_1 called."
end
end
TaskMan.register_func Callee.func_0
TaskMan.register_func Callee.func_1
taskman_thread = Thread.new do
TaskMan.run_server
end
taskman_thread.join
基本上,这就是我想要做的,但是我不确定如何使用to_proc
和call
来推入函数并调用它们。
还赞赏其他解决方案,但我不想避免学习将函数作为参数传递,将其放入数组并调用它们。
谢谢。
您可以改为传递接收器和您打算调用的函数,如下所示:
class TaskMan
@@func_array = Array.new
def self.register_func(receiver, func)
@@func_array.push([receiver, func])
end
def self.run_server
loop do
@@func_array.each do |(receiver, func)|
receiver.method(func).call
end
sleep 60
end
end
end
class Callee
def self.func_0
puts "func_0 called."
end
def self.func_1
puts "func_1 called."
end
end
TaskMan.register_func Callee, :func_0
TaskMan.register_func Callee, :func_1
taskman_thread = Thread.new do
TaskMan.run_server
end
taskman_thread.join
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句