2010-08-24 59 views

回答

3

你的第二個例子初始化@blah作爲一個類變量。它不會被直接訪問(它需要一個類訪問器),並且在類的所有實例中都是相同的。

實例變量本質上是私有的,儘管您可以通過@foo.instance_variable_get("@blah")訪問它們。通常,如果你想訪問一個@blah實例變量,你可以添加一個訪問器。

class Shape 
    attr_accessor :blah 
end 

這將讓你說,例如,shape = Shape.new; shape.blah = "whee"; puts shape.blah(你會得到 「whee」)。

+0

類變量是@@ blah。 – kiamlaluno 2010-08-24 08:46:43

+0

我覺得你的姓應該是「先驅者」,而不是「綜合」。因爲它感覺它缺少一些東西(特別是'r')。同樣,你的答案是缺少一些東西......正確的術語是「類實例變量」,不是簡單的「類變量」(當kiamlaluno正確指出時,這將是@@ blah) – horseyguy 2010-08-24 15:04:03

+0

你們都是正確的。疲勞時我應該避免。你不會相信發佈它爲「先驅報」的電話推銷員的數量。 :d – 2010-08-24 18:47:40

1

實例變量不必在任何地方定義,您可以開始使用它們。但要小心其中你使用它們。你的第三個例子不是你想要的。

class Something 
    @var = 10 
end 

這是指一個實例變量類的東西,不是的任何實例的一個實例變量的。請記住不要在實例方法之外引用實例變量。