为什么在Scala Option中创建这样的单个元素列表?

时间:2015-02-05 04:35:21

标签: scala

/** Returns a singleton list containing the $option's value
* if it is nonempty, or the empty list if the $option is empty.
*/  
def toList: List[A] =
  if (isEmpty) List() else new ::(this.get, Nil)

什么时候可以使用

  if (isEmpty) List() else List(this.get)

1 个答案:

答案 0 :(得分:5)

由于你的版本(即List(this.get))更具可读性并产生相同的结果,我愿意打赌这纯粹是一种优化。也就是说,要获得非空列表,必须在某个时刻调用List构造函数(“new ::”) - 最快的方法是直接调用它。

在List.apply的实现中:

override def apply[A](xs: A*): List[A] = xs.toList

构造函数调用至少需要两个额外的堆栈帧(List.apply,然后是xs.toList)。