2016-11-29 70 views
0

如果我有一個打印使用at symbol @實例變量var我應該引用var的方法的自定義類?何時使用符號來引用實例變量,何時不使用?

TL; DR:我應該使用方法puts_readerputs_ivar爲什麼?

class Foo 
    attr_reader :var 

    def initialize 
    @var = "foobar" 
    end 

    def puts_reader 
    puts var 
    end 

    def puts_ivar 
    puts @var 
    end 
end 
+0

實例變量是* *總是用'引用@',局部變量沒有'@'。 'attr_reader'只是爲你添加一個實例***方法***'var',所以它既不是實例變量也不是本地變量。 –

+0

TL; DR的稍微可疑使用:) –

+0

正如您已經顯示的那樣,您可以使用'@ var'或'var'(提供您的包裝方法設置)引用'@ var'。這取決於你,@var稍微快一些,但它並不重要。 –

回答

0

在你的代碼,你可以只使用var因爲attr_reader這就是說,

def var 
    @var 
end 
+0

哦,所以var使用隱式方法'var',因爲'attr_reader:var'? –

+0

是的,正是:) – Ursus