Scala 中 Iterable[String] 与 List[String] 的用法
usage of Iterable[String] vs. List[String] in Scala
我在阅读 Scala 脚本时发现 Iterable[string]
的大量使用。
例如:
def wordFeatures(words: Iterable[String]): Iterable[Vector] = words.map(w => Try(word2vecModel.transform(w))).filter(_.isSuccess).map(_.get)
我是 Scala 新手,我会直接使用 List[String]
、Array[String]
、Vector[String]
集合,而不是 Iterable[String]
、Iterable[Int]
。
我想也许使用 iterable 会减少内存使用和 OOM 的可能性,但不确定。
所以,问题是:在 Scala 中传递可迭代对象而不是集合作为函数的参数有什么优势?
这很方便,因为 Iterable
是 Scala 集合层次结构中的最顶层之一。接受 Iterable
函数可以处理大多数独立于具体实现的数字特定类型,函数不需要知道它。知道可以迭代什么集合就足够了。所以,这与内存优化无关,它只是 Barbara Liskov 替换原则的实现。
有用的链接:
我在阅读 Scala 脚本时发现 Iterable[string]
的大量使用。
例如:
def wordFeatures(words: Iterable[String]): Iterable[Vector] = words.map(w => Try(word2vecModel.transform(w))).filter(_.isSuccess).map(_.get)
我是 Scala 新手,我会直接使用 List[String]
、Array[String]
、Vector[String]
集合,而不是 Iterable[String]
、Iterable[Int]
。
我想也许使用 iterable 会减少内存使用和 OOM 的可能性,但不确定。
所以,问题是:在 Scala 中传递可迭代对象而不是集合作为函数的参数有什么优势?
这很方便,因为 Iterable
是 Scala 集合层次结构中的最顶层之一。接受 Iterable
函数可以处理大多数独立于具体实现的数字特定类型,函数不需要知道它。知道可以迭代什么集合就足够了。所以,这与内存优化无关,它只是 Barbara Liskov 替换原则的实现。
有用的链接: