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

なぜそれが必要なのかわかりませんが、実際に次のことを達成できます。

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 に答える
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 に答える