Scala,Currying多参数组方法,包括隐式参数?

khe*_*aud 7 scala currying

在发现currying多参数组方法成为可能之后,我试图得到一个需要隐式参数的部分应用函数.

接缝不可能这样做.如果没有,你能解释一下为什么吗?

scala> def sum(a: Int)(implicit b: Int): Int = { a+b }
sum: (a: Int)(implicit b: Int)Int

scala> sum(3)(4)
res12: Int = 7

scala> val partFunc2 = sum _
<console>:8: error: could not find implicit value for parameter b: Int
       val partFunc2 = sum _
                       ^
Run Code Online (Sandbox Code Playgroud)

我使用单例对象来创建这个部分应用的函数,我想在定义隐式int的作用域中使用它.

dre*_*xin 8

那是因为你在范围内没有隐式Int.看到:

scala> def foo(x: Int)(implicit y: Int) = x + y
foo: (x: Int)(implicit y: Int)Int

scala> foo _
<console>:9: error: could not find implicit value for parameter y: Int
              foo _
              ^

scala> implicit val b = 2
b: Int = 2

scala> foo _
res1: Int => Int = <function1>
Run Code Online (Sandbox Code Playgroud)

隐式被编译器替换为实际值.如果你对方法进行curry,结果是一个函数,函数不能有隐式参数,所以编译器必须在你方法时插入值.

编辑:

对于您的用例,为什么不尝试这样的事情:

object Foo {
  def partialSum(implicit x: Int) = sum(3)(x)
}
Run Code Online (Sandbox Code Playgroud)