为什么这个类似python的ruby脚本不起作用?

jvm_update 4 ruby python scope

我对Ruby中的作用域如何工作感到困惑.哪些Ruby作用域规则阻止以下代码打印出x的值?

#!/usr/bin/ruby

x = 5
def test
    puts "x = #{x}"
end

test    # => undefined local variable or method `x' for main:Object

等效的Python脚本会打印x的值:

#!/usr/bin/python

x = 5
def test():
    print "x = %s" % x

test()  # => x = 5

Sergio Tulen.. 5

这就是所谓的"范围门".ruby中有三个门:方法,类或模块的定义.意味着在该定义中,来自外部范围的本地化不可见.

这是因为当范围更改时,当前的绑定集将被一组新的绑定替换,并且无法轻松访问.

有关更多信息,请参阅" 元编程Ruby:程序类似于Ruby专业人员 ".