2013-05-08 70 views
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是把折叠正确的地方的意见。 (无论如何,现在将它移动到包对象)

谢谢!

+0

@senia谢谢! 我也刚刚发现这是一个折叠的错误定义:P – Illiax 2013-05-08 08:05:49

回答

4

(OT, OT => T)表示Tuple2[OT, Function1[OT, T]]

(T1, T2),其中T1OTT2OT => T

一般类型(T1, T2, T3, ..., TN)元组元数N(即与N元件)。

相反,如果你想要写的功能,对应的类型为:

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

这相当于N参数的功能对象,并导致R

FunctionN[-T1, -T2,..., -TN, +R] 
+0

@ pagoda_5b:感谢您提供的建议。它被其他评论者拒绝,所以我已经手动应用它。 – senia 2013-05-08 08:35:13