所以我學到的是,當我在對象上調用變量時,Ruby實例變量是否具有訪問修飾符?
my_object.variable
的方法稱爲variable
正在返回的variable
def variable
@variable
end
值在Java中,有訪問修飾符。如果getter方法以其變量命名,Ruby如何使用訪問修飾符?
所以我學到的是,當我在對象上調用變量時,Ruby實例變量是否具有訪問修飾符?
my_object.variable
的方法稱爲variable
正在返回的variable
def variable
@variable
end
值在Java中,有訪問修飾符。如果getter方法以其變量命名,Ruby如何使用訪問修飾符?
首先,在回答問題之前,有一些術語需要清理。
一個是你永遠不會「調用」變量。 Ruby的表達
my_object.variable
是方法調用。沒有可變電話這樣的事情。你調用方法,而不是變量。即使該方法被命名爲variable
。 :)
第二個是如果你沒有這樣定義的方法,這
def variable
@variable
end
直接或說
attr_reader :variable
然後你有一個名爲variable
方法和一個名爲@variable
變量。
現在回答這個問題。
紅寶石地方訪問修飾符public
,protected
,只有private
的方法,並且不上變量。對變量的訪問控制實際上並不合理,因爲它們只能在對象的方法中引用,並且從不帶前綴!換句話說,你永遠不會寫這個:
[email protected]
這只是一個語法錯誤。你可以寫
obj.var
其中var
是一個方法的名稱。訪問控制僅適用於該方法。
事實上,您可能正在製作具有相同名稱的變量和方法(@
除外)實際上並不重要。只有方法具有訪問控制。
希望能幫助澄清一些可以理解的困惑!
有幾種方法可以使方法在Ruby中是私有的。
使用private
讓所有後來的方法私:
class Foo
def public_method
end
private
def private_method
end
end
或製作方法私人你定義後:
class Foo
def public_method
end
private :public_method # public_method is now private
end
或者 - 因爲該方法的定義返回一個符號太多 - 這也作品:
class Foo
private def method_name
end
end
謝謝。當我執行'my_object.variable'時,我可以在Java中說「調用變量」嗎?我明白爲什麼我不能在Ruby中。 –
如果您將「呼叫」表示爲「訪問」,那麼是的,大多數人都會理解。但鑑於我們通常所說的「函數調用」和「方法調用」,在談到變量時最好避免使用該術語。但是人們會在Java中理解你,儘管我認爲「訪問」或「讀取」對變量更好。你調用方法,但讀取變量。正如你注意到的,你真的不能用Ruby來說。 :) Ruby和Java在這裏確實非常不同。 –
從技術上講,實例變量屬於對象(又名實例),而不屬於類。一個實例變量不能從另一個*對象*中看到,而不是一個不同的類。 (例如,可以從子類或超類的方法中看到)。 –