1
我知道至少有兩種寫尾部遞歸函數的樣式。以一個sum
功能,例如:尾遞歸:內部「循環」函數或累加器的默認值
def sum1(xs: List[Int]): Int = {
def loop(xs: List[Int], acc: Int): Int = xs match {
case Nil => acc
case x :: xs1 => loop(xs1, acc + x)
}
loop(xs, 0)
}
VS
def sum2(xs: List[Int], acc: Int = 0): Int = xs match {
case Nil => acc
case x :: xs1 => sum2(xs1, x + acc)
}
我注意到的第一個樣式(內循環功能)較爲普遍要比第二。有什麼理由更喜歡它,或者只是一個風格問題的區別?
有很好的理由,以避免違約的論點大部分時間(見[此評論](HTTPS ://github.com/typelevel/wartremover/issues/116#issuecomment-5128034 4)和其餘的線程)。 – 2014-11-24 18:31:26
默認參數值在scala歷史中是相對較新的,這可以解釋表單1更常見。但也存在將額外參數作爲公共接口的一部分的問題,這可能很奇怪。 – 2014-11-24 18:31:40