3

为什么这个例子会失败?

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
4

3 回答 3

2

方法中的变量只存在于那些方法中。变量xy应该是全局的:

$x = 100
$y = 200
于 2013-11-12T20:41:19.967 回答
2

你可以,但这取决于你使用什么类型的变量。有5种类型的变量,

  1. 全局变量
  2. 实例变量
  3. 类变量
  4. 局部变量
  5. 常数。

您正在尝试使用本地的。为了做你想做的事,你可以选择全局、实例或类变量

局部变量的范围从类、模块、def 或 do 到相应的结尾或从块的左大括号到其右大括号 {}。

这就是为什么你的例子不起作用。

阅读http://www.tutorialspoint.com/ruby/ruby_variables.htm

于 2013-11-12T21:20:19.803 回答
2

Ruby 中的方法没有词法范围,即它们不是对象。换句话说,在方法之外声明的局部变量在设计上根本不可用。

块的工作方式不同:它们实际上是对象,也能够访问周围范围的局部变量:

x = 5

increment_x = proc do
  x += 1
end

increment_x.call

puts x         # prints 6
于 2013-11-12T21:11:50.050 回答