【发布时间】:2015-08-18 21:11:06
【问题描述】:
在开始交互式会话之前,我正在使用 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 不能以某种方式暴露并合并到当前上下文中吗?
【问题讨论】:
-
-r使用require加载库并根据its documentation:“局部变量不会传播到加载环境。”. -
@Stefan 谢谢,我现在正在查看文档以寻找某种“带绑定”功能,否则我会尝试写一些东西来将绑定暴露给 irb 会话