1

我在階爲較高kinded類型的用戶定義的別名:擴展用戶定義的更高kinded類型

type FutureOfLastError = Future[LastError] 

我也有該類型的值:

val myFuture: FutureOfLastError = ... 

要寫入可讀代碼我想定義(例如)一種方法,如

def mapToString = { ... } 

它將FutureOfLastError的實例映射到Future [String]並調用它就像

myFuture mapToString 

我該怎麼做?它甚至有可能嗎?我已經試過在案例類中進行封裝,我想到了各種各樣的隱式轉換。

我最喜歡的選擇是類型別名上的伴侶對象,但是我無法讓它工作,因爲我無法從伴侶對象調用特質Future的方法(如地圖等)。

回答

1

你不需要實際擴展類,你可以使用一個隱式類(這只是「豐富我的庫」模式的語法糖)。 像這樣簡單的事情應該這樣做:

implicit class MyFutureOps(future: FutureOfLastError) { 
    def mapToString = future.map(_.toString) 
} 
+0

好極了。非常感謝您的回覆。它工作完美。到目前爲止,我只是不知道隱式類(我只是一個scala初學者,因爲你可能已經猜到了...... ;-)) – jens 2013-03-04 10:19:54

相關問題