我试图让功能柯里正常工作。我有如下:斯卡拉功能组合
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'的定义,这些下划线对于部分应用来说不会是*的。你能建议吗? –