【发布时间】:2019-04-06 22:46:11
【问题描述】:
为了记录,我发现函数在 Scala 中不能自动柯里化,这很烦人。我正在尝试编写一个接受任何函数并返回咖喱版本的工厂:
def curry(fn:(_ => _)) = (fn _).curried
基本上我在这里定义的是一个函数curry,它以fn 类型的函数_ => _ 作为参数,并返回函数fn 的柯里化版本。显然这不起作用,因为 Java。
这是我得到的错误:
error: _ must follow method; cannot follow fn.type
def curry(fn:(_ => _)) = (fn _).curried
那里的任何大师可以帮助我弄清楚为什么这不起作用?我并不是说听起来刻薄,我习惯于将所有类型都视为函数的函数式语言。请帮助这个 Scala 新手。
(我用 haskell 标记了这个问题,因为我试图让 Scala 函数表现得像 Haskell 函数:'(
更新
澄清一下,我需要一个 curryN 函数,所以这个函数可以对任何其他函数进行柯里化,而不管它的数量如何。
旁注,有人指出增加 fn 参数的数量可以解决问题。没有:
def curry2(fn:((_, _) => _)) = (fn _).curried
error: _ must follow method; cannot follow fn.type
def curry2(fn:((_, _) => _)) = (fn _).curried
【问题讨论】:
-
你不能
curryFunction1。 -
请解释一下这是什么意思
-
我不知道任何 Scala,但我认为这意味着你需要像
curry(fn:((_,_) => _)) = (fn _).curried这样的东西。 -
_ => _是Function1,( _ , _ ) => _是Function2等等。 -
我需要 curry 一个有 N 个参数的函数。这就是我试图描述的......请查看更新问题
标签: scala haskell functional-programming