我对Ruby中的作用域如何工作感到困惑.哪些Ruby作用域规则阻止以下代码打印出x的值?
#!/usr/bin/ruby
x = 5
def test
puts "x = #{x}"
end
test # => undefined local variable or method `x' for main:Object
Run Code Online (Sandbox Code Playgroud)
等效的Python脚本会打印x的值:
#!/usr/bin/python
x = 5
def test():
print "x = %s" % x
test() # => x = 5
Run Code Online (Sandbox Code Playgroud)
这就是所谓的"范围门".ruby中有三个门:方法,类或模块的定义.意味着在该定义中,来自外部范围的本地化不可见.
这是因为当范围更改时,当前的绑定集将被一组新的绑定替换,并且无法轻松访问.
有关更多信息,请参阅" 元编程Ruby:程序类似于Ruby专业人员 ".
| 归档时间: |
|
| 查看次数: |
206 次 |
| 最近记录: |