由于有点难以解释的原因,我需要执行以下操作:我有一个master.rb
文件,可以设置一些全局的文件:a = 1
。我想调用另一个文件other_file.rb
,它将与主文件中设置的全局变量一起运行。在python中,我使用runpy.run_module( 'other_module', globals() )
。
有人能想到Ruby中的等价物吗?我查看了require
,include
和load
,但似乎都没有做到我所需要的,特别是他们不会将全局变量放入other_file.rb
。请注意,我不是要尝试分叉一个新进程,只需将执行权交给“other_module”,同时保持全局变量的状态。
答案 0 :(得分:4)
a=1
不是全局变量,它是一个局限于该文件范围的局部变量。如果您确实需要这种行为,请使用$a=1
设置全局变量。
答案 1 :(得分:4)
如果绝对必须,则可以使用全局变量,并使用$
前缀声明它们。他们非常气馁,因为只有一个全局命名空间,这使冲突成为可能。通常它们用于解释器配置,例如$LOAD_PATH
。
更好的方法是使用具有实例变量的模块:
module MyContainer
def self.settings
@settings ||= { }
end
end
MyContainer.settings[:foo] = :bar
这样做的好处是可以保持变量包含在命名空间中,同时不会阻止其他子程序访问它们。
请记住,这只能在同一个Ruby进程或使用fork
创建的子进程的上下文中工作,因此使用system
或exec
将不起作用。还要记住,分叉进程需要使用IPC与其父进程通信。