如何将函数像红宝石中的对象一样对待?

科塞尔

在我的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_proccall来推入函数并调用它们。

还赞赏其他解决方案,但我不想避免学习将函数作为参数传递,将其放入数组并调用它们。

谢谢。

比哈伊德

您可以改为传递接收器和您打算调用的函数,如下所示:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

是否存在启动其他命令的命令如何将外壳结构像重定向一样对待的标准?

像使用红宝石一样使用&&(“和”)?

如何将我的对象像数组一样与map函数一起使用

如何像对待PHPStorm中的php语法突出显示一样对待.tpl语法突出显示

在这段代码中,如何将指向链接列表的指针当作链接列表本身一样对待?

像目录一样对待网页

像函数中的对象一样收到列表

(编辑)如何将TextView数组添加到像网格一样的布局中?

如何将音频文件像流一样加载到AudioContext中?

Firestore交易是否像串行队列一样对待?

像正常争论一样对待自己

如何在JSP页面中将XML标签像纯文本一样对待

如何像列表一样对待字节数组?

如何让eclipse像Java文件一样对待没有扩展名的文件?

在Javascript源代码中,不间断空格是否总是像空白一样对待?

如何将python脚本加载到内存中并像执行命令行一样执行它?

AttributeError:ResultSet对象没有属性“ get_text”。您可能正在将元素列表像单个元素一样对待

方法也是像函数一样的对象吗?

如何像对象一样使用“ this”并通过字符串获取其变量/函数?

注入和减少红宝石一样吗?

像ECS服务一样,如何将服务帐户附加到gke部署/服务?

如何将整数作为输入输出参数像数组一样处理?

如何将文本文件转换为像报纸一样的列?

如何将案例类放入rdd并使其像元组(对)一样工作?

如何将HTMLElement像Angular Material一样放在组件内部

如何将参数像普通属性一样传递给方法?

如何将段落文字显示为像文字打字效果一样

将函数像DefinePlugin一样注入Webpack

像对待比特流一样对待任何文件进行加密/解密