use*_*541 0 ruby ruby-on-rails
我不能把这想象成一个主要在C工作的人.
以下代码如何合理?
if true
hi = "hello"
end
puts hi
Run Code Online (Sandbox Code Playgroud)
我习惯hi不在范围内puts,所以它会出错.Ruby中的作用域如何工作.我似乎无法找到解释它的明确教程.
即使这是有效的,这是好的做法吗?
在Ruby中,有5个范围:
阻止范围嵌套,其他嵌套范围不嵌套.块可以关闭它们的词汇环境,其他块则不能.(IOW:它们不仅嵌套在它们的词汇周围环境中,即可以从它们的词汇周围环境中访问变量,它们甚至可以在周围环境不再存在之后继续这样做.)
与其他一些语言不同,Ruby没有局部变量的顶级或全局范围."最大"的范围是脚本范围,但这不是全局的,它仅限于单个脚本.(通常,脚本与文件相同,但有些Ruby实现不使用文件,因此像"文件范围"这样的术语会产生误导.)
局部变量是从解析定义的位置定义的,并从执行定义的点开始初始化.在它们之间,当它们被定义但未初始化时,它们会评估为nil.
考虑这个略微修改的例子:
if false
hi = 'hello'
end
hi
# => nil
# hi is defined here, because its definition was parsed
if true
hi = 'olleh'
end
hi
# => 'olleh'
# hi is initialized here, because its definition was executed
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |