隨便用 Array、String、Map 擧個例子。
先看Array:
pub fn Array::fold[A, B](self : Array[A], init~ : B, f : (B, A) -> B) -> B {
for i = 0, acc = init; i < self.length(); {
continue i + 1, f(acc, self[i])
} else {
acc
}
}
再看String:
pub fn fold[A](self : String, init~ : A, f : (A, Char) -> A) -> A {
let mut rv = init
for c in self {
rv = f(rv, c)
}
rv
}
接下來是Map,需要先 .iter()
pub fn Iter::fold[T, B](self : Iter[T], init~ : B, f : (B, T) -> B) -> B {
let mut acc = init
for a in self {
acc = f(acc, a)
}
acc
}
我想問,這難道不是重複代碼嗎?爲什麽相同的功能用了三套代碼實現?