只是好奇定义的以下部分之间有什么区别
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类是否适合放置折叠的建议。 (无论如何我现在将它移动到包装对象)
谢谢!
答案 0 :(得分:4)
(OT, OT => T)
表示Tuple2[OT, Function1[OT, T]]
。
即。 (T1, T2)
,T1
为OT
且T2
为OT => T
。
一般来说,(T1, T2, T3, ..., TN)
类型是arity N
的元组(即N
个元素)。
相反,如果你想编写函数,相应的类型是:
(T1, T2, T3, ..., TN) => R
对应N
个参数的函数对象,结果为R
FunctionN[-T1, -T2,..., -TN, +R]