我知道Scala List可以创建为:
val l = List(1,2,3)
执行上述声明时,幕后的内容是什么? 这里调用apply方法吗?
根据scala文档:对于序列,apply是位置索引 http://docs.scala-lang.org/overviews/collections/seqs.html
那么,是否有2种应用方法,一种用于位置索引&另一个作为对象创建的工厂方法?
答案 0 :(得分:5)
此调用实际上将随播广告对象上的apply方法调用到List
类。
许多scala类都有一个伴随对象,它是一个与该类同名的单例对象。在此伴随对象上定义方法是scala等效于java的静态方法。这些伴随对象通常具有一个或多个apply方法,这些方法用作构造函数/工厂函数来创建类的实例。在这种情况下,List
对象有一个方法,它接受相同类型的可变数量的参数,并创建这些对象的List
。
实际上,如果你定义一个case class
,scala会自动定义一个伴随对象,除其他之外,还包括和apply方法,它接受与case类的构造函数相同的参数,这是为什么在构建案例类时不需要使用new
。
列表实例还有一个apply方法,用于索引列表,但由于它是在List 类上定义的,它只适用于类,而不是对象List
本身。