Jen*_*der 33

Traversable是集合层次结构的顶层.它的主要方法是'foreach',因此它允许为集合的每个元素做一些事情.

一个可迭代可以创建一个Iterator,在此基础上的foreach可以实现.这定义了元素的某些顺序,尽管每个迭代器的顺序可能会改变.

Seq(uence)是一个Iterable,元素的顺序是固定的.因此,谈论元素的索引是有意义的.

是懒惰的序列.即,在访问流之前可能无法计算流的元素.这使得可以使用无限序列,如所有整数的序列.

视图是集合的非严格版本.像过滤器和视图上的映射方法只在访问相应元素时执行传递的函数.因此,巨大集合上的映射会立即返回,因为它只是在原始集合周围创建一个包装器.只有当一个人访问一个元素时,才会实际执行映射(对于该元素).请注意,View不是一个类,但是有许多XxxView类用于各种集合.

  • 观点不是懒惰,只是非严格.懒惰需要缓存,流可以,但视图不需要. (9认同)
  • 也许"memoization"将是一个更好的描述,因为这可以排除值被丢弃,这不是缓存的情况. (9认同)
  • @DanielC.Sobral"懒惰需要缓存" - 嗯,什么? (4认同)
  • @DanBurton - 如果你再次要求相同的值,它将不会被重新计算.否则,它不是那么"懒":) (3认同)