gpt4 book ai didi

scala - 如何定义接受柯里化(Currying)函数参数的函数?

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

以下fn2编译失败,

def fn(x: Int)(y: Int) = x + y
def fn2(f: ((Int)(Int)) => Int) = f
fn2(fn)(1)(2) // expected = 3

如何定义 fn2接受 fn ?

最佳答案

它应该如下:

scala> def fn2(f: Int => Int => Int) = f
fn2: (f: Int => (Int => Int))Int => (Int => Int)

scala> fn2(fn)(1)(2)
res5: Int = 3
(Int)(Int) => Int不正确 - 您应该使用 Int => Int => Int (就像在 Haskell 中一样),而不是。实际上,柯里化(Currying)函数需要 Int并返回 Int => Int功能。

附言您也可以使用 fn2(fn _)(1)(2) , 作为传递 fn在前面的例子中只是 eta-expansion 的一种简短形式,见 The differences between underscore usage in these scala's methods .

关于scala - 如何定义接受柯里化(Currying)函数参数的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26239677/

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