0

ゆっくりとscalaに移行しています。これらのいずれかを実行できますか (どうやら私がここに持っている方法ではないようです)?

def genericFunc(param1:String, param2:String, specificFunc(param2:SpecficType):[T]):[T] =
{
    val interim:SpecificType = makeSpecificType(param1,param2)
    specificFunc(interim)
}


def genericFunc(param1:String, param2:String,specificFunc(param2:SpecficType):Object):Object ={
    val interim:SpecificType = makeSpecificType(param1,param2)
    specificFunc(interim)
}

または、specificFunc は特性/インターフェースである必要がありますか。

4

1 に答える 1

3

関数を引数として別の関数に渡すには、次のメソッド シグネチャが必要です。

def genericFunc[T](param1:String, param2:String, specificFunc: SpecficType => T): T = ???

SpecficType => T- は関数型です。これは、型の引数を 1 つ取りSpecficType、ジェネリック型の値を返す関数が必要であることを意味しますT。例:

def fromString[A](str: String, f: String => A) = f(str)

fromString("hello", str => str.toCharArray.sum.toInt)

これをさらに最適化できます:

fromString("hello", _.toCharArray.sum.toInt)

この場合fromString高階関数です。HOF は、次のことができる関数です。

  • 別の関数を引数として取る
  • 関数を返す

このすべてのものは、教授で完全に説明されています。Odersky book on - Scala でのプログラミング

于 2013-10-02T18:40:39.530 に答える