我試圖讓功能柯里正常工作。我有如下:斯卡拉功能組合
def method(x: ByteArrayInputStream)
(y: ByteArrayOutputStream)
(z: GZIPOutputStream)
(func: (ByteArrayInputStream, GZIPOutputStream) => Unit) = {
.....
.....
}
現在,當我稱呼它,我把它稱爲是這樣的:
method(new ByteArrayInputStream("".getBytes("UTF-8")))
(new ByteArrayOutputStream())
(new GZIPOutputStream(_))
(myFunc(_, _))
我的理解是,在第三個參數即到GZIPOutputStream,當我說_,它會從第二個參數中選取值。但它抱怨說,
Type mismatch, expected: GZIPOutputstream, actual: (OutputStream) => GZIPOutputStream
任何提示?
您已經定義了一個帶四個參數列表的方法,每個參數列表都有一個參數。你還沒有創建一個咖喱'功能'。在調用這個方法時使用下劃線的地方,你實際上使用了部分應用程序('GZIPOutputStream'構造函數和'myFunc',不管是什麼)。我不確定你習慣了什麼,但是Scala並不是Haskell和curried函數,它們可以被創建,但並不常用。至少不會在經常使用ScalaZ的FP純化社區之外。 –
@RandallSchulz我不認爲在這個例子中_是一個部分應用函數...它擴展爲實際:(OutputStream)=> GZIPOutputStream ...其中沒有任何參數部分適用 –
@AndrewCassidy:我不能想到'myFunc'的定義,這些下劃線對於部分應用來說不會是*的。你能建議嗎? –