當我開始學習Ruby時,我從Michael Hartl出色的Rails Tutorial開始。我剛剛重新訪問了教程,並注意到示例應用程序代碼的部分內容已被修改。在認證章節中,更改了兩種方法:添加self關鍵字有什麼不同?
# SessionsHelper
def sign_in(user)
...
self.current_user = user
end
def sign_out
self.current_user = nil
...
end
以前,關鍵字self
被省略。但該應用程序工作。所以,如果它沒有損壞,爲什麼要修復它? self
增加了什麼值,它爲什麼被使用?
我知道self
定義了類方法,而不是實例方法。在模型中,使用self
可以讓我們直接引用對象的屬性。但是我不能把這些點聯繫起來,看看它是如何用於幫手的。我以前在控制器中看過它,我不明白爲什麼我們想在那裏使用它。
如果這個工作是不帶'self'關鍵字,那麼他們必須一直使用實例變量(B/C這個調用setter方法,但沒有自我,它會設置一個局部變量)。這些不是一回事,而IMO,使用設置方法比實例變量好得多(b/c設置ivar直接意味着你已經知道它的實現,但是調用setter將這些知識僅包含在一個方法中)。 –
@JoshuaCheek:不一定,可能有'attr_accessor:current_user'或者一個顯式方法'def current_user =(new_user)',並且相同的語法是有效的。 – maerics
確實有一種方法(在新版本和舊版本中):'def current_user =(user)@current_user = user end' – Mohamad