接下来一步,我们将在类Element中实现方法above。把一个元素放在另一个上面是指串连这两个元素 的contents值。因此方法above的第一个草案看上去可能是这样的:
def above(that: Element): Element = new ArrayElement(this.contents ++ that.contents)
++操作符串连两个数组。Scala里的数组被表示为Java数组,但是支持更多的方法。特别是,Scala里 的数组继承自类scala.Seq,能够表现象序列这样的结构并包含许多访问和转换序列的方法。本章会解释 某些数组方法,更全面的讨论将在第17章。
实际上,前面展示的代码并不完全足够,因为它不允许你把不同长度的元素堆叠在一起。然而本节为 了让事情保持简单,我们会任由其状态并仅仅把相同长度的元素传递给above。10.14节里,我们会给 above做个改良,这样客户就能用它组合不同长度的元素了。
下一个要实现的方法是beside。把两个元素靠在一起,我们将创造一个新的元素,其中的每一行都来 自于两个元素的相应行的串连。如前所述,为了保持事情简单我们会一开始假设两个元素高度相同。这 产生了方法beside的下列设计:
def beside(that: Element): Element = { val contents = new Array[String](this.contents.length) for (i < - 0 until this.contents.length) contents(i) = this.contents(i) + that.contents(i) new ArrayElement(contents) }
beside方法首先分配了一个新数组,contents,并串连this.contents和that.contents中相应的数组 元素来填充。最终产生了新的ArrayElement包含了新的contents。
尽管beside的这个实现可以工作,但它是指令式风格,马脚露在我们索引数组的循环。这个方法可以 替代缩减成一个表达式:
new ArrayElement( for ( (line1, line2) < - this.contents zip that.contents ) yield line1 + line2 )
这里,this.contents和that.contents两个数组被使用zip操作符转换为一个对子的数组(可以称为 Tupele2)。zip方法从它的两个参数中拣出相应的元素并组织成对子数组。
例如,表达式:
Array(1, 2, 3) zip Array("a", "b")
将生成:
Array((1, "a"), (2, "b"))
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
, 方法
, 元素
, element
, contents
两个
scala tostring、scala 实现接口、scala实现wordcount、scala 实现java接口、scala是java实现的吗,以便于您获取更多的相关知识。