运行另一个完整的ruby脚本?
出于有点难以解释的原因,我需要执行以下操作:我有一个运行另一个完整的ruby脚本?,ruby,Ruby,出于有点难以解释的原因,我需要执行以下操作:我有一个master.rb文件,它设置了一些全局变量,如:a=1。我想调用另一个文件other_file.rb,该文件将与主文件中设置的全局变量一起运行。在python中,我会使用runpy.run\u模块('other\u module',globals()) 有人能想到Ruby中的等价物吗?我已经查看了require、include和load,但似乎没有一个能完全满足我的需要,特别是它们没有将全局变量拉入其他_文件.rb。请注意,我并没有尝试派生一
master.rb
文件,它设置了一些全局变量,如:a=1
。我想调用另一个文件other_file.rb
,该文件将与主文件中设置的全局变量一起运行。在python中,我会使用runpy.run\u模块('other\u module',globals())
有人能想到Ruby中的等价物吗?我已经查看了
require
、include
和load
,但似乎没有一个能完全满足我的需要,特别是它们没有将全局变量拉入其他_文件.rb
。请注意,我并没有尝试派生一个新的进程,只是将执行交给“other_module”,同时保持全局变量的状态。a=1
不是一个全局变量,它是一个局部变量,作用域为文件。如果您确实需要这种行为,请使用$a=1
来设置全局变量。如果您确实需要,您可以使用全局变量,并且它们以$
前缀声明。它们非常不受欢迎,因为只有一个全局名称空间,这使得冲突成为可能。通常,它们用于解释器配置,如$LOAD\u PATH
更好的方法是使用具有实例变量的模块:
module MyContainer
def self.settings
@settings ||= { }
end
end
MyContainer.settings[:foo] = :bar
这样做的好处是将变量保存在名称空间中,而不会阻止其他子程序访问它们
请记住,这只能在使用
fork
创建的相同Ruby进程或子进程的上下文中工作,因此使用system
或exec
将不起作用。还请记住,分叉流程需要使用IPC与其父进程进行通信。这不是全局性的<代码>$a=1正在设置全局值。您只是在外部范围内设置了一个局部变量。谢谢,这是我遗漏的关键部分!我同意这是一种干净的方式。在我所处的非常奇怪的环境中,它不会起作用。谢谢你的解释!