我讀Iteratee.scala的源代碼理解Iteratee.fold:https://github.com/playframework/Play20/blob/master/framework/src/iteratees/src/main/scala/play/api/libs/iteratee/Iteratee.scala不能在玩2.0
具體地用於構建「摺疊」 iteratee的簡便方法。
def fold[E, A](state: A)(f: (A, E) => A): Iteratee[E, A] = {
def step(s: A)(i: Input[E]): Iteratee[E, A] = i match {
case Input.EOF => Done(s, Input.EOF)
case Input.Empty => Cont[E, A](i => step(s)(i))
case Input.El(e) => { val s1 = f(s, e); Cont[E, A](i => step(s1)(i)) }
}
(Cont[E, A](i => step(state)(i)))
}
在每個case語句,我們呼籲完成或續構造。但是這些構造函數在哪裏定義?我推斷這些必須是Iteratee特徵的實現者,但我無法通過按Ctrl + F來找到它們以獲得「extends Iteratee」。
噢,這是一種單例方法!令人混淆的是,他們試圖將它僞裝成一個班級。謝謝! – Mark
構造函數的調用應該以'new'開始。 – senia
@Mark:作爲一個警告,這些並不是Java的意義上的_constructors_,但它們具有ADT的含義,您經常會看到對「完成」構造函數「,這正是你在這裏看到的。 –