2

定義の次の部分の違いに興味があります

abstract class OperationTree {
  def foldOT[T] (flr : (OT, OT) => T, fsv : (Number => T), fs : (String => T), a : OT) : T =
    a match {
      case SimpleValue(v) => fsv(v)
      case SimpleString(s) => fs(s)
      case SimpleOperation(lot, rot, bop) => flr(foldOT[T](flr,fsv,fs,lot) , foldOT[T](flr,fsv,fs,rot))
    }
 }

上記のコードは正しいです (願っています!!)。でも最初に書いた時はdefの部分が違ってた

  def foldOT[T] (flr : (OT, OT => T), fsv : (Number => T), fs : (String => T), a : OT) : T =

この定義では、エラーが発生しました (OT、OT => T はパラメーターを取りません) パラメーターを取りません。

flr : (OT, OT => T) の本当の意味は、

クラスOTが折り目を付けるのに適切な場所であるかどうかについてアドバイスを受けます. (とにかく今はパッケージオブジェクトに移動しています)

ありがとう!

4

1 に答える 1

4

(OT, OT => T)を意味しTuple2[OT, Function1[OT, T]]ます。

つまり(T1, T2)、どこにT1あり、どこにOTありT2ますOT => T

一般に、型(T1, T2, T3, ..., TN)はアリティのタプルNです(つまり、N要素を持ちます)。

代わりに、関数を書きたい場合、対応する型は次のとおりです。

(T1, T2, T3, ..., TN) => R

これは、引数と結果の関数オブジェクトに対応しますNR

FunctionN[-T1, -T2,..., -TN, +R]
于 2013-05-08T07:53:40.860 に答える