2012-10-26 70 views
0

在Play2文檔,我覺得這樣的事情:大寫的第一個字母,是否爲咖喱定義命名約定?

def LoggingAction(f: Request[AnyContent] => Result): Action[AnyContent] = { 
    Action { request => 
    Logger.info("Calling action") 
    f(request) 
    } 
} 

它是Scala中的一個慣例用於定義一個首字母大寫可以用{ ... }因爲curryfication來叫什麼名字?或者它只是Play2的選擇?

我在說LoggingAction和Action。

+0

我沒有看到這個代碼的曲折。柯里利將多參數函數轉化爲一系列部分應用的函數。例如(A,B,C)=> D到A => B => C => D。 – pedrofurla

回答

2

首先,正如@pedrofurla在他的評論中指出的那樣,柯里裏與你在這裏看到的沒有任何關係。其次,儘管LoggingActionAction從API用戶的角度看具有類似的特徵,但區分它們是很重要的。

Action按慣例大寫,因爲它是類和伴侶對象的名稱。從上下文來看,這可能並不明顯,因爲Action被稱爲函數,但真正發生的事情更爲微妙。由於Action同伴對象定義apply方法,

Action(arg) 

被視爲簡寫

Action.apply(arg) 

也就是說,看起來像一個函數調用其實只是Action對象的apply方法的調用。在像這樣在方法採用單個函數作爲參數的情況下它是通常使用括號:

Action apply { request => 
    // ... 
} 

LoggingAction,在另一方面,是一種方法。大寫方法名稱是而不是,這可能會讓API的用戶感到困惑。但是,在這種情況下它可能是適當的,因爲它在整個API中創建一致性。一般來說,這種用法的目的是要清楚的是,呼叫創建一些事情(在這裏,一個記錄行動),而不是東西。粗略的經驗法則是,大寫字母表示名詞,而小寫字母表示動詞

+0

我不認爲調用'LoggingAction apply ...'會起作用。 – pedrofurla

+0

@pedrofurla不,不會,因爲LoggingAction是一種方法而不是對象。我不確定是什麼促成了這個評論,但我想我需要澄清我的答案。 –

相關問題