在Scala中如何用单个参数来curry现有函数并传递给更高阶函数?

时间:2013-12-22 09:43:49

标签: scala functional-programming currying higher-order-functions

我有一个功能

def myInnerFunc(a: Int): Int = a

现在我想把它传递给一个更高阶的函数,我希望它传递给带有参数的初始化的高阶函数,所以需要首先使用正确的参数调用我的内部函数,然后才能将它传递给高阶函数可以组成如下:

def myHigherOrderFunction(func: Int => Int): Int = {
  func()
}

所以我需要完成以下代码

myInnerFunc(1) // hmm fix this will actually call my innner function I just want to preinitialize it with one.
func() // didn't work for me how do i run my preinitialized with argument func Int => Int 
  1. 如何使用参数1预先初始化myInnerFunc而不运行它?
  2. 如何从高阶函数中运行func()?
  3. 我不确定如何做到这一点并且无法真正找到相关文档,有人可以提供一个例子吗? (我看到的所有例子都有多个参数,我只有一个参数)

2 个答案:

答案 0 :(得分:1)

如果您只是想以某种方式延迟对f的评估,将其包含在另一个函数中,您可以使用匿名函数:

val outer = { () => f(1) }

单个参数currying的原因并不是那么频繁,因为在没有副作用的情况下,这会产生一个常数,这不是那么令人兴奋或有用。

答案 1 :(得分:0)

让我们以相反的顺序提出你的问题:

  

如何在高阶函数中运行func()?

如果已经提供了参数,则不再需要它,因此myHigherOrderFunction看起来像这样:

def myHigherOrderFunction(func: Unit => Int): Int = { func() }
  

如何使用参数1预先初始化myInnerFunc而不运行它?

所以你需要Unit => Int类型的东西。

val thunk: Unit => Int = { _ => myInnerFunc(argument) }