Scala中List(),Array()和新List(),新Array()之间的差异
发布时间:2020-12-16 10:08:29 所属栏目:安全 来源:网络整理
导读:我知道当你输入: val list = List(2,3) 您正在访问List对象的apply方法,该方法返回List.我无法理解的是,当List类是抽象的并且因此不能直接实例化时,为什么这是可能的(新的List()不会编译)? 我还想问一下有什么区别: val arr = Array(4,5,6) 和 val arr =
我知道当你输入:
val list = List(2,3) 您正在访问List对象的apply方法,该方法返回List.我无法理解的是,当List类是抽象的并且因此不能直接实例化时,为什么这是可能的(新的List()不会编译)? val arr = Array(4,5,6) 和 val arr = new Array(4,6) 解决方法
我开始写这个,确定这个的简单方法是查看你正在调用的方法的源代码,这些方法可以从
ScalaDoc获得.但是,实际构建列表所经历的各种间接层次都是骗局的. “容易”这个词!如果需要,值得查看,从List对象中的apply方法开始,定义如下:
override def apply[A](xs: A*): List[A] = xs.toList 您可能知道也可能不知道xs:A *形式的参数在内部被视为Seq,这意味着我们在Seq上调用toList方法,Seq在TraversableOnce中定义.然后,它委托给一个泛型的方法,该方法寻找一个隐式的方法 幸运的是,Array.apply的行为更容易查找: def apply[T: ClassTag](xs: T*): Array[T] = { val array = new Array[T](xs.length) var i = 0 for (x <- xs.iterator) { array(i) = x; i += 1 } array } 因此,Array.apply只是委托给新??的Array,然后适当地设置元素. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |