TraversableOnce使用可变的var result
实现foldLeft
。
def foldLeft[B](z: B)(op: (B, A) => B): B = {
var result = z
this foreach (x => result = op(result, x))
result
}
我知道递归地实现foldLeft
是不实际的,现在我想知道是否有可能在没有可变变量的情况下高效地实现foldLeft
。
能做到吗?如果不能,为什么?
TraversableOnce使用可变的var result
实现foldLeft
。
def foldLeft[B](z: B)(op: (B, A) => B): B = {
var result = z
this foreach (x => result = op(result, x))
result
}
我知道递归地实现foldLeft
是不实际的,现在我想知道是否有可能在没有可变变量的情况下高效地实现foldLeft
。
能做到吗?如果不能,为什么?
3条答案
按热度按时间sqyvllje1#
尾递归是您的朋友:
顺便说一句,
TraversableOnce
没有实现head
或tail
,访问这些元素的唯一方法是使用foreach
。ax6ht2ek2#
cbeh67ev3#