我在开始交互式会话之前使用irb -I . -r script.rb
到require
脚本。可以使用全局范围中定义的函数,但除非使用@
有没有办法访问在脚本的全局上下文中定义的局部变量或更好的方法来执行此操作
script.rb :
def func() "..." end
a = "str"
@b = 1
然后irb
开始后:
irb(main):001:0> a
NameError: undefined local variable or method `a' for main:Object
from (irb):1
from /usr/bin/irb:11:in `<main>'
irb(main):002:0> @b
=> 1
irb(main):003:0> func
=> "..."
我假设脚本的内容就像在函数中定义一样执行(例如:C语言中的main
),因此全局上下文中的变量是在外部无法访问的局部变量范围
大多数人在编写脚本时都会使用@
变量吗?
用例范围很窄(脚本开发),解决方案很简单(用variable
搜索替换任何@variable
),但我正在学习语言的语义和我我很好奇。不能以某种方式公开execution context并将其合并到当前上下文中吗?
答案 0 :(得分:2)
没有。您无法从不同的范围访问本地变量。这是局部变量的整点:它们是定义它们的范围的本地。
在这种情况下,a
是script.rb
脚本正文的本地。
答案 1 :(得分:1)
也许 binding.irb
就是您要找的。p>
script.rb:
def func() "..." end
a = "str"
@b = 1
binding.irb
<块引用>
打开一个 IRB 会话,调用 binding.irb 允许 交互式调试。您可以调用任何可用的方法或变量 在当前范围内,并根据需要改变状态。