为什么这个例子会失败?
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
为什么这个例子会失败?
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
方法中的变量只存在于那些方法中。变量x
和y
应该是全局的:
$x = 100
$y = 200
你可以,但这取决于你使用什么类型的变量。有5种类型的变量,
您正在尝试使用本地的。为了做你想做的事,你可以选择全局、实例或类变量。
局部变量的范围从类、模块、def 或 do 到相应的结尾或从块的左大括号到其右大括号 {}。
这就是为什么你的例子不起作用。
Ruby 中的方法没有词法范围,即它们不是对象。换句话说,在方法之外声明的局部变量在设计上根本不可用。
块的工作方式不同:它们实际上是对象,也能够访问周围范围的局部变量:
x = 5
increment_x = proc do
x += 1
end
increment_x.call
puts x # prints 6