7

可能重复:
Rails 和类变量

谁能告诉我 Ruby 实例变量和局部变量有什么区别?

据我所知,实例变量和局部变量都是相同的,并且都在方法本身内部声明,除了实例变量使用@符号表示。

4

1 回答 1

13

这是一个范围问题。局部变量仅在定义它的方法中可见/可用(即,当方法返回时它会消失)。

另一方面,实例变量在定义它的类的实例中的任何其他地方都是可见的(这与在类的所有实例之间共享的类变量不同)。但请记住,定义实例变量时很重要。如果您在一个方法中定义了一个实例变量,但在调用第一个方法之前尝试在另一个方法中使用它,您的实例变量将具有 nil 值:

def method_one
  @var = "a variable"

  puts @var
end

def method_two
  puts @var
end

@var 将有不同的值,具体取决于您调用每种方法的时间:

method_two() # Prints nil, because @var has not had its value set yet

method_one() # Prints "a variable", because @var is assigned a value in method_one

method_two() # Prints "a variable" now, because we have already called method_one
于 2012-08-27T13:19:51.317 回答