2013-12-19 72 views
1

我就糊塗瞭如何庫的工作原理:在ApplicationController中調用私有方法?

的ApplicationController中有一個名爲selected_account(),你可以在這裏看到的私有方法:ApplicationController

然後,another Controller這是從ApplicationController的孩子,我們做一個動作是是否這樣做:

def index() 
    @selected_account = selected_account 
    graph = get_accounts_graph() 
    @accounts = Account.get_accounts_map(graph) 
    end 

我們該怎麼做?它沒有超出範圍嗎?

回答

2

這會讓來自java或c#世界的人感到困惑。但這裏是一個體面的解釋

在Ruby中,繼承層次或封裝/模塊真的不 進入方程,這是相當所有關於它的對象是特定的方法調用的 接收器。當一個方法在Ruby中被聲明爲 私有時,這意味着這個方法永遠不會被一個 顯式接收器調用。任何時候我們可以通過一個隱式接收器調用一個私有方法,它總是會成功的。這意味着我們可以從它在聲明以及這類

0

子控制器繼承自ApplicationController,因此它可以調用內部私有方法而不會出現問題。沒有範圍問題。子類繼承其超類的所有public/private/protected方法。

1

首先它可能會讓人困惑,但在Ruby中private並不意味着它在Java/C++中意味着什麼。祖先可以調用私有方法。

private實際上意味着你不能用明確的目標調用該方法。也就是說,如果foo是私人的,則可以用foo()來調用它,但不能用self.foo()obj.foo()來調用它。這樣你可以只對自己調用私有方法。

此外,Ruby有protected。語義又與Java/C++不同 - protected方法只能從同一類的實例中調用。它很少使用。

+0

謝謝所有 子類中調用 私有方法,公認的答案就這樣在我頭上經過多年的PHP/Java的風格類的抽象規則。 –

相關問題