gpt4 book ai didi

Scala 功能组合

转载 作者:行者123 更新时间:2023-12-02 04:56:12 25 4
gpt4 key购买 nike

我正在尝试让柯里化(Currying)函数正常工作。我有以下内容:

    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

有什么提示吗?

最佳答案

问题在

(new GZIPOutputStream(_))

正如您的错误所述,您的方法需要一个 GZIPOutputstream,但您将它从 OutputStream 传递给 GZIPOutputStream

下划线起初有点令人困惑,但它是告诉 scala 您有意不将参数传递给 GZIPOutputStream 的方式,这样它就不会提示缺少参数。换句话说,您传递的是函数本身,而不是函数的结果。

如何修复它取决于您实际尝试做什么。如果您确实想要传递 GZIPOutputStream,则需要将 _ 替换为 OutputStream

如果您的意图是让 method 创建一个 GZIPOutputStream 给定一个类似于您传递的工厂函数,您需要更改 的声明类型>z。例如,

(z: (OutputStream) => GZIPOutputStream)

然后在方法主体中,您可以使用类似z(y) 的语句来获取GZIPOutputStream。 (或者将 y 替换为其他输出流。)

关于Scala 功能组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22020097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com