gpt4 book ai didi

ruby - 如何在 ruby​​ 脚本之间传递变量?

转载 作者:数据小太阳 更新时间:2023-10-29 08:16:38 24 4
gpt4 key购买 nike

与实际的代码解决方案相比,我最感兴趣的是理论。我怎样才能让一个主要的 ruby​​ 脚本调用其他脚本并在彼此之间共享变量?我有点困惑..我是否需要使用环境变量、 session 变量、方法、模型、 Controller ,最好的方法是什么!!?

最佳答案

假设您有一个 script.rb,其中包含:

$var = :value
def get; A end
load 'another_script.rb'
get # Will it succeed?

当您运行 ruby script.rb 时,您会生成一个 Ruby 进程,该进程将读取 script.rb 的内容并执行每一行。 Ruby 解释器有一个执行状态,它包含对象数据、引用它们的变量、它们所属的范围、您当前使用的方法等信息。

当解释器读取 $var = :value 行时,它会修改自己的状态。它存储一个引用新创建的符号对象的全局变量。接下来,它定义了一个方法,该方法将返回 A 常量引用的值。此时调用它会引发 NameError,因为常量不存在。当它到达 load 'another_script.rb' 行时,它类似于运行 ruby another_script.rb,只是没有启动第二个进程。脚本的内容在相同的执行上下文中被读取和解释。

假设 another_script.rb 包含以下内容:

$var = :changed
class A; end

以前引用:value 符号的$var 变量现在将引用:changed 符号。然后,将创建一个 Class 对象并将其分配给新的 A 常量。

加载此脚本后,对 get 的调用将成功。另一个含义是顺序很重要。例如:

load 'another_script.rb'
$var = :value

无论 another_script.rb$var 设置为什么都将丢失,因为它将在完成执行后立即被覆盖。

无论您loadrequireeval 有多少脚本,只要它们运行在同一个进程上,它们就会< em>总是共享相同的数据。 Only local variables will not be shared between files .当您想在两个不同 Ruby 解释器之间共享数据时,事情就变得复杂了:

ruby script.rb &
ruby another_script.rb &

在这种情况下,您必须使用 inter-process communication .

关于ruby - 如何在 ruby​​ 脚本之间传递变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10430455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com