为什么我不能在方法之外定义变量并从方法中更新?

时间:2013-11-12 20:38:38

标签: ruby scope local-variables

为什么这个例子失败了?

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

3 个答案:

答案 0 :(得分:2)

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

$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种类型的变量,

  1. 全局变量
  2. 实例变量
  3. 类变量
  4. 局部变量
  5. 常数。
  6. 您正在尝试使用本地的。 为了做你想做的事,你可以选择全局,实例或类变量

    局部变量的范围从class,module,def或do到相应的结尾,或从块的左大括号到其大括号{}。

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

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