2010-03-25 20 views
3

我正在開發一個Rails應用程序,並想了解何時使用self.forRails:何時使用自我

這是我想完全理解的方法的代碼。如果可能的話,我希望有一個替代這個代碼,這樣會讓事情變得更加清晰。

def self.for(facebook_id) 
    User.create_by_facebook_id(facebook_id) 
end 
+0

這不是特定於Rails的,所以我將它標記爲這樣。 – 2010-03-25 04:00:31

回答

10

是指當前對象。

在一個類中,self用於定義類級方法。

class Foo 
    def self.for(facebook_id) 
    User.create_by_facebook_id(facebook_id) 
    end 
end 

在類Foo定義類方法。它被調用:

Foo.for(facebook_id) 

你可以谷歌的類方法來了解更多。

這可能是Rails的一部分或插件/創業板期望有些類將有一個類方法「for」更多的上下文將在這方面有所幫助。

什麼方法做

正如類方法常見的,它要創建一個類的實例。例如,ActiveRecord類有一個類方法「create」,它嘗試創建已存儲在數據庫中的模型類的實例。因此,User.create將返回已存儲在數據庫中的User類的一個實例。

在您的示例代碼中,它正在調用應用程序中User類提供的類方法「create_by_facebook_id」。

貌似「爲」正被用於信息,因爲所有它做的是另一種製作方法調用(以User.create_by_facebook)

新增隱藏方法:

順便說一句,默認返回值來自Ruby的方法是最後一條語句的值。所以你的示例方法將返回從提供的facebook_id新創建的用戶實例。

0

它看起來像我self.for只是一個用於創建一個用戶的Facebook ID的別名。我覺得其實self.for應該是:

def self.for(facebook_id) 
    User.find_or_create_by_facebook_id(facebook_id) 
end 

它搜索與Facebook的ID的用戶,如果沒有找到一個,創建一個記錄並返回它的方式。然後,self.for的意思是「返回用戶這個Facebook的ID」。

+0

這個答案與被問到的問題無關:在這段代碼片斷中,自我意味着什麼...... – severin 2010-03-25 09:27:04

+0

不一定。他問自己,爲什麼,我回答。不需要讓我失望,因爲你以不同的方式解釋他的問題。 – mjaz 2010-03-25 22:02:56

0

簡短回答:自我總是指當前對象。所以在實例方法中,self是實例,在類方法中,self是類,並且在類定義內(如您的示例中),self是類...

有關類方法的更多信息和您發佈的代碼片段,請參閱Larry K.的答案。

0

如果代碼是一個名爲Foo類裏面,那麼可選的方案是:

def Foo.for(facebook_id) 
    User.create_by_facebook_id(facebook_id) 
end 

self在這種情況下是必要的,如果你有,你希望能夠使用一些通用類級別的方法跨多個班級。您可以使用self.將它們添加到Module中以對它們進行範圍(因爲您不知道它們將要參與的實際類的名稱),然後將該模塊作爲類的一部分。

相關問題