以下是手动过程
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._
是一个奖励。
这种方式缩短了 10 个符号:
val af = (_: A).f _
您可以创建 A 的实例并导入方法:
val a = A(4)
import a._
没有其他方法可以做到这一点,因为x
需要保存一个值。但是,您可以创建一个单例对象而不是一个类并相应地更改您的方法签名:
object A {
def f(x:Int)(y:Int) = x*y
}
import A._
据我所知,不可能将一个类的所有方法都变成柯里(constructor)(method signature)
化函数。
我不知道你为什么想要那样,但你确实可以实现以下目标:
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