2013-05-08 24 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