0

当我在 IPython 中执行脚本时,通过使用run myscript.py,脚本中的名称将在交互式解释器中可用,供我进一步试验。

irb我使用运行脚本时,这似乎没有发生load 'myscript.rb'

如何将变量保持在交互式 ruby​​ 的范围内?

4

2 回答 2

2

局部变量在定义它们的范围内是局部的。这就是它们被称为局部变量的原因。如果您在脚本中定义了一个局部变量myscript.rb,那么它将被定义在该范围内而不是其他任何地方。这就是局部变量的全部意义所在。

如果您想要一个全局可用的变量,请使用全局变量。或者可能是顶级main对象的实例变量。

于 2013-03-27T17:37:09.230 回答
1

我在查看此问题时发现的答案是使用全局变量或类或函数。

因此,例如,如果我正在使用watir并且我有一个正在与之交互的浏览器对象,我可以使用以下内容从测试脚本中获取它:

全局变量

Watir_test.rb

require "watir-webdriver"

browser = Watir::Browser.new :chrome
$b = browser

# all sorts of preliminary stuff I do on the browser object

# end of my test script

现在启动后irb,我加载测试文件

irb(main):001:0> load './watir_test.rb'
irb(main):002:0> browser
NameError: undefined local variable or method `browser' for main:Object
    from (irb):2
    from C:/Ruby193/bin/irb:12:in `<main>'
irb(main):004:0> $b
=> #<Watir::Browser:0x..fd9200f9a url="http....">

返回的元素

test_code.rb

    def test_code
        a = 5    
        return a
    end

> load 'test_code.rb'
> a = test_code()

返回 + local_variables

这是一个简洁的示例: https ://stackoverflow.com/a/1961317/999943

Ruby local_variables 返回:符号?

def foo(((a, b, c, d), e, *f), g, *h)
  local_variables.sort.each do |lvar| puts "#{lvar} => #{eval(lvar).inspect}" end
end

foo([[1, 2, 3], 4, 5, 6], 7, 8, 9)
# a => 1
# b => 2
# c => 3
# d => nil
# e => 4
# f => [5, 6]
# g => 7
# h => [8, 9]
于 2014-11-05T21:56:43.997 回答