2013-11-03 36 views
2

作爲FP in Scala練習的一部分,我正在IndexedSeq上執行foldLeft在IndexedSeq上實現foldLeft

我寫了2個功能:

def foldLeft[A, B](as: IndexedSeq[A])(z: B)(f: (B, A) => B): B = { 
    def go(bs: IndexedSeq[A], acc: B): B = { 
     if (bs.isEmpty) acc 
     else go(bs.tail, f(acc, bs.head)) 
    } 
    go(as, z) 
    } 

而且,當時的pattern match方式:

def foldLeftPM[A, B](as: IndexedSeq[A])(z: B)(f: (B, A) => B): B = { 
    def go(bs: IndexedSeq[A], acc: B): B = bs match { 
     case x +: xs => go(xs, f(acc, x)) 
     case _ => acc 
    } 
    go(as, z) 
    } 

編輯需要注意的是,我從dhgsanswer+:操作。它似乎是IndexedSeq的班級或其父母的成員,因爲它沒有定義每個鏈接的帖子。

無論哪種方式更好(從性能或慣用斯卡拉的角度來看)?

回答

0

模式匹配肯定比較習慣。

對於性能,它們應該大致相同,因爲它們完全相同。

雖然只有基準測試會做出決定,而且包括很多假設。