2012-08-27 85 views
6
實例和局部變量之間的區別

可能重複:
Rails and class variables紅寶石:在Ruby中

有誰請告訴我什麼是Ruby的實例變量和局部變量之間的區別?

據我所知,實例變量和局部變量是相同的,並且都在方法本身內部聲明,除了實例變量是用@符號來表示的。

+0

我對這個解釋在這裏:http://stackoverflow.com/questions/11523547/rails-and-class-variables/11523632#11523632 – Frost

+1

谷歌它。我是認真的。 – vise

回答

11

這是一個scope的問題。局部變量在其定義的方法中僅可見/可用(即,當方法返回時它將消失)。

另一方面,實例變量在定義類的實例的任何其他地方都可見(這與在類的所有實例之間共享的類變量不同)。請記住,雖然,當你定義實例變量是重要的。如果你在一個方法定義一個實例變量,但嘗試調用第一個之前使用它的另一種方法,你的實例變量將爲零值:

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 
+0

偉大的答案 - 我想補充說,如果一個局部變量(例如localVar)在method_one中聲明,那麼它不能從method_two調用。 – BKSpurgeon