class Shape
def initialize()
@blah = ""
end
end
或...這項工作?在Ruby中,必須首先在「初始化」中定義實例變量(類的實例),然後才能工作?
class Shape
@blah = ""
def initialize()
end
end
另外,默認情況下,實例變量是公共還是私有?你如何將它們設置爲公共或私人?
class Shape
def initialize()
@blah = ""
end
end
或...這項工作?在Ruby中,必須首先在「初始化」中定義實例變量(類的實例),然後才能工作?
class Shape
@blah = ""
def initialize()
end
end
另外,默認情況下,實例變量是公共還是私有?你如何將它們設置爲公共或私人?
你的第二個例子初始化@blah
作爲一個類變量。它不會被直接訪問(它需要一個類訪問器),並且在類的所有實例中都是相同的。
實例變量本質上是私有的,儘管您可以通過@foo.instance_variable_get("@blah")
訪問它們。通常,如果你想訪問一個@blah
實例變量,你可以添加一個訪問器。
class Shape
attr_accessor :blah
end
這將讓你說,例如,shape = Shape.new; shape.blah = "whee"; puts shape.blah
(你會得到 「whee」)。
實例變量不必在任何地方定義,您可以開始使用它們。但要小心其中你使用它們。你的第三個例子不是你想要的。
class Something
@var = 10
end
這是指一個實例變量類的東西,不是的任何實例的一個實例變量的。請記住不要在實例方法之外引用實例變量。
類變量是@@ blah。 – kiamlaluno 2010-08-24 08:46:43
我覺得你的姓應該是「先驅者」,而不是「綜合」。因爲它感覺它缺少一些東西(特別是'r')。同樣,你的答案是缺少一些東西......正確的術語是「類實例變量」,不是簡單的「類變量」(當kiamlaluno正確指出時,這將是@@ blah) – horseyguy 2010-08-24 15:04:03
你們都是正確的。疲勞時我應該避免。你不會相信發佈它爲「先驅報」的電話推銷員的數量。 :d – 2010-08-24 18:47:40