2014-01-05 147 views
0

嗨,我非常喜歡初學者。作爲變量調用方法的命名方法Ruby

我想我明白attr_accessor是如何工作的(下圖)。 「setter」是name=(name)方法。我知道那個方法相當於這個任務:name = "john"。因爲「=」是接受參數並將該參數分配給任何對象調用它的方法。 (雖然我不知道如何「名」可以考慮的對象,因爲它被分配到一個對象)

所以我的問題是:你怎麼可以指定一個變量調用一個方法,一個方法叫什麼名字?這感覺就像我失去了一些東西..

class Person 
    def name 
    @name 
    end 

    def name=(name) 
    @name = name 
    end 
end 
+0

目前還不清楚你在問什麼。你只是問如何使用你的'name ='方法? – meagar

+0

感謝您的回覆。我認爲name =實際上是一個變量「name」,用「string」參數調用方法「=」。這是如何被允許作爲方法名稱本身? –

+0

錯誤,不,該方法本身被稱爲'name ='。這就是Ruby如何表示setter方法。 – meagar

回答

1

所以我的問題是:你怎麼可以指定一個變量調用一個方法作爲 方法的名字嗎?這感覺就像我失去了一些東西..

你不知道。在此代碼

def name=(name) 
    @name = name 
end 

name=不是可變name調用方法=。該方法的名稱name=

編輯:

在上述代碼段與終止end配對的def構成的方法的定義。

def method_name(param1, param2) 
    # method body 
end 

在同一行def只能有方法名,可選圓括號和帕拉姆列表。根據定義,在該行中有一個「變量調用方法」將是非法的。所以在你的代碼name=是方法名稱。

+0

爲什麼如果我寫這段代碼「object.name =」tim「它最終會調用這個方法嗎? –

+0

它只是語法糖。等號前面的空格被忽略,並調用方法'name =' – jcm

+0

i理解這一點,但我仍然不明白爲什麼「name =」會調用名稱爲「name =」的方法,而不是試圖在名稱上調用方法「=」,因爲範圍而不起作用。是否當我輸入object.name。=(「tim」)是給我打字的結果object.name =(「tim」)。我會嘗試寫在另一個盒子裏更清晰 –