/** 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)
答案 0 :(得分:5)
由于你的版本(即List(this.get))更具可读性并产生相同的结果,我愿意打赌这纯粹是一种优化。也就是说,要获得非空列表,必须在某个时刻调用List构造函数(“new ::”) - 最快的方法是直接调用它。
在List.apply的实现中:
override def apply[A](xs: A*): List[A] = xs.toList
构造函数调用至少需要两个额外的堆栈帧(List.apply,然后是xs.toList)。