【问题标题】:accessing variables in loaded source while in irb在 irb 中访问加载源中的变量
【发布时间】:2010-09-25 12:19:59
【问题描述】:

假设我有一个名为 test1.rb 的文件,代码如下:

my_array = [1, 2, 3, 4 5]

然后我运行 irb 并得到一个 irb 提示符并运行“require 'test1'。此时我希望能够访问 my_array。但如果我尝试执行类似...

puts my_array

irb 告诉我“my_array”未定义。有没有办法访问“my_array”

【问题讨论】:

标签: ruby irb


【解决方案1】:

像这样:

def my_array
    [1, 2, 3, 4, 5]
end

【讨论】:

  • 注意,如果您正在做比创建数组更复杂的事情,您可能需要设置一个本地实例变量来保存结果对象...例如我的“加载”初始化连接到用于测试的 API,带有凭据和所有内容。所以在我的“加载”之后,我只需执行 api = my_api
【解决方案2】:

您还可以要求您的脚本并通过其他几种方式访问​​该数据。一个局部变量是不能访问的,但是这三种数据类型可以在作用域内访问,类似于方法定义。

MY_ARRAY = [1, 2, 3, 4 5] #constant
@my_array = [1, 2, 3, 4 5] #instance variable
@@my_array = [1, 2, 3, 4 5] #class variable
def my_array # method definition
  [1, 2, 3, 4 5]
end

【讨论】:

    【解决方案3】:

    不,没有。局部变量在定义它们的范围内总是局部的。这就是为什么它们被称为局部变量,毕竟。

    【讨论】:

      【解决方案4】:

      在 irb 中:

        eval(File.read('myarray.rb'),binding)
      

      或者你可以drop to irb

      【讨论】:

      • 我真的希望这会起作用,但我仍然收到“未定义的局部变量”错误
      • 您能否显示您测试的确切代码,或者可能是会话的转储,因为这确实有效。
      • 在一个名为“myarray.rb”的文件中,我有“my_array = (1..5).to_a”。然后在 irb 我做 eval(File.read('myarray.rb')) 输出“[1, 2, 3, 4, 5]”。这很好,但我希望能够访问“my_array”,但它在当前的 irb 会话中不存在。
      • 哦,抱歉,您需要将绑定传递给 eval:eval(File.read('myarray.rb'), binding)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      相关资源
      最近更新 更多