2016-12-12 23 views
4

我發現了一個奇怪類型在this代碼在github:目的=> 0

final class StaticRouteB[Page, O](private val f: (=> Action[Page]) => O) extends AnyVal { 
    def ~>(a: => Action[Page]): O = f(a) 
    } 
  1. 類型的f。這是什麼意思 ?我的猜測是,它是一個函數,名稱參數調用。從來沒有見過它,所以我不確定它是什麼或者這個東西是如何工作的。

  2. 有沒有辦法將這種類型轉換爲更「標準」的東西? (以上我的意思,所以它不使用(=> Action[Page]) => O)類型的代碼?是這種類型的只是一些語法糖?)

  3. 不知尤其是,如果我通過Action[Page] => Of創建StaticRouteB時會發生什麼?我會得到一個編譯錯誤?運行時錯誤?爲什麼?我的意思是,(=> ...)的目的是什麼?如果沒有通過正確的函數或改變f參數的評估策略,是否會給出編譯錯誤?我的意思是爲什麼有人想要這樣的類型?出於什麼目的?

回答

7

(=> Action[Page])是 「通話按名稱」 參數。

所以f: (=> Action[Page]) => O是由[頁]式動作名稱參數調用一個函數,這個函數返回類型O.

的結果,你可以看到它使用的方法~>定義。

+0

謝謝,有沒有辦法將此類型轉換爲更「標準」的東西? – jhegedus

+0

另外,我特別想知道,如果我在創建'StaticRouteB'時將'Action [Page] => O'作爲'f'通過了會發生什麼?我會得到一個編譯錯誤?運行時錯誤? – jhegedus

+1

這是寫這種類型的標準和最簡單的方法。如果需要,可以使用類型別名。但是這不會簡化「底層」的任何事情。 – Tyth

相關問題