Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行另一个完整的ruby脚本?_Ruby - Fatal编程技术网

运行另一个完整的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正在设置全局值。您只是在外部范围内设置了一个局部变量。谢谢,这是我遗漏的关键部分!我同意这是一种干净的方式。在我所处的非常奇怪的环境中,它不会起作用。谢谢你的解释!