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

我对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
最佳答案
有关Ruby的作用域和范围选通的更多信息,请参见“Ruby classes, include, and scope”.

有几种方法可以提供测试功能的可见性.一种是使变量成为实例变量:

#!/usr/bin/ruby

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

另一种是使用lambda的闭包:

#!/usr/bin/ruby

x = 5
test = lambda do
    puts "x = #{x}"
end

test.call

或Proc.new()

#!/usr/bin/ruby

x = 5
test = Proc.new do
    puts "x = #{x}"
end

test.call

有关lambda和Proc.new之间的差异,请参阅“When to use lambda, when to use Proc.new?”.

转载注明原文:为什么这个类似python的ruby脚本不起作用? - 代码日志