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)where T1isOTT2is 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 回答