2015-06-20 50 views
0

我想用部分應用的方法定義一個類的方法。如果沒有完全應用這種方法,這樣做有可能嗎?如何用部分應用函數定義類方法?

這是我最好的拍攝:

def getFile1(arg1: String) (implicit execution: ExecutionContextExecutor): Future[File] = 
    getFile("file 1")_ 

def getFile2(arg1: String) (implicit execution: ExecutionContextExecutor): Future[File] = 
    getFile("file 2")_ 

def getFile(fileName: String)(arg1: String)(implicit execution: ExecutionContextExecutor): Future[File] = //... 

會發生什麼事是,雖然,而不是把getFile1(arg1)getFile('file 1', arg1)等同,斯卡拉試圖評估getFile("File 2")_,看到一個錯誤,因爲getFile("File 2")_類型是功能,而不是一份文件。

回答

3

錯誤是正確的。 getFile("..")_是方法內的表達式(其評估爲部分函數)並且它是而不是'方法定義'。

寫出來作爲以下應使這更清楚:

def getFile2(arg1: String) (implicit execution: ExecutionContextExecutor): Future[File] = { 
    return getFile("file 2")_ 
} 

對比度與getFile("file 2")(arg1),其具有未來[文件]的預期表達類型/結果。

如果想要方法返回一個部分應用函數,然後將返回類型從Future [File]更改爲任何適當的。 (或讓類型推斷做它將要做的事情。)

+0

我知道這就是發生了什麼。我所問的是,是否有辦法解決這個問題。 –

+1

是(或否,取決於視圖):根據* actual *簽名返回正確的類型或更改簽名。沒有這樣的'元別名'功能。即使創建一個'val'(在這種情況下,隱式將不起作用),它仍然需要*按照部分方法正確輸入*。 – user2864740

相關問題