为什么这个例子失败了?
x = 100
y = 200
def my_method
puts "Current x/y: #{x}, #{y}" # fails to find x and y
x += 1 # fails to find x
y += 1 # fails to find y
end
答案 0 :(得分:2)
方法中的变量仅存在于这些方法中。
变量x
和y
应该是全局的:
$x = 100
$y = 200
答案 1 :(得分:2)
Ruby中的方法没有词法范围,即它们不是对象。换句话说,在方法之外声明的局部变量根本无法通过设计获得。
块的工作方式不同:它们实际上是对象,也能够访问周围范围的局部变量:
x = 5
increment_x = proc do
x += 1
end
increment_x.call
puts x # prints 6
答案 2 :(得分:2)
您可以,但这取决于您使用的变量类型。 有5种类型的变量,
您正在尝试使用本地的。 为了做你想做的事,你可以选择全局,实例或类变量。
局部变量的范围从class,module,def或do到相应的结尾,或从块的左大括号到其大括号{}。
这就是为什么你的例子不起作用。