以下は手動プロセスです
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 _
なぜそれが必要なのかわかりませんが、実際に次のことを達成できます。
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
A のインスタンスを作成し、メソッドをインポートできます。
val a = A(4)
import a._
x
値を保持する必要があるため、これを行う他の方法はありません。ただし、クラスの代わりにシングルトン オブジェクトを作成し、それに応じてメソッド シグネチャを変更することもできます。
object A {
def f(x:Int)(y:Int) = x*y
}
import A._
私の知る限り、クラスのすべてのメソッドをカリー化された(constructor)(method signature)
関数に変えることはできません。