6

以下是手动过程

case class A(x: Int) { def f(y: Int) = x * y }
val af: (A => Int => Int) = _.f

val a = A(4)
val r = af(a)(2)

有没有一种方便的方法来获得类似的功能af?之类的东西A magic f,可能不使用反射。能够通过导入类的所有公共方法import A#magic._是一个奖励。

4

3 回答 3

12

这种方式缩短了 10 个符号:

val af = (_: A).f _
于 2012-04-06T10:35:54.883 回答
2

您可以创建 A 的实例并导入方法:

val a = A(4)
import a._

没有其他方法可以做到这一点,因为x需要保存一个值。但是,您可以创建一个单例对象而不是一个类并相应地更改您的方法签名:

object A {
  def f(x:Int)(y:Int) = x*y
}

import A._

据我所知,不可能将一个类的所有方法都变成柯里(constructor)(method signature)化函数。

于 2012-04-06T10:24:40.950 回答
2

我不知道你为什么想要那样,但你确实可以实现以下目标:

scala> case class A(x:Int){ def f(y:Int)=x*y}
defined class A

scala> val af = A(2).f _
af: (Int) => Int = <function1>

scala> af(3)
res0: Int = 6
于 2012-04-06T10:49:24.917 回答