使用全局变量运行另一个ruby脚本?

时间:2012-01-18 23:49:09

标签: ruby

由于有点难以解释的原因,我需要执行以下操作:我有一个master.rb文件,可以设置一些全局的文件:a = 1。我想调用另一个文件other_file.rb,它将与主文件中设置的全局变量一起运行。在python中,我使用runpy.run_module( 'other_module', globals() )

有人能想到Ruby中的等价物吗?我查看了requireincludeload,但似乎都没有做到我所需要的,特别是他们不会将全局变量放入other_file.rb。请注意,我不是要尝试分叉一个新进程,只需将执行权交给“other_module”,同时保持全局变量的状态。

2 个答案:

答案 0 :(得分:4)

a=1不是全局变量,它是一个局限于该文件范围的局部变量。如果您确实需要这种行为,请使用$a=1设置全局变量。

答案 1 :(得分:4)

如果绝对必须,则可以使用全局变量,并使用$前缀声明它们。他们非常气馁,因为只有一个全局命名空间,这使冲突成为可能。通常它们用于解释器配置,例如$LOAD_PATH

更好的方法是使用具有实例变量的模块:

module MyContainer
  def self.settings
    @settings ||= { }
  end
end

MyContainer.settings[:foo] = :bar

这样做的好处是可以保持变量包含在命名空间中,同时不会阻止其他子程序访问它们。

请记住,这只能在同一个Ruby进程或使用fork创建的子进程的上下文中工作,因此使用systemexec将不起作用。还要记住,分叉进程需要使用IPC与其父进程通信。