日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
如何實(shí)現(xiàn)Scala的above,beside和toString

接下來一步,我們將在類Element中實(shí)現(xiàn)方法above。把一個(gè)元素放在另一個(gè)上面是指串連這兩個(gè)元素的contents值。因此方法above的***個(gè)草案看上去可能是這樣的:

岐山網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),岐山網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為岐山上千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的岐山做網(wǎng)站的公司定做!

 
 
 
  1. def above(that: Element): Element =
  2.  new ArrayElement(this.contents ++ that.contents)

++操作符串連兩個(gè)數(shù)組。Scala里的數(shù)組被表示為Java數(shù)組,但是支持更多的方法。特別是,Scala里的數(shù)組繼承自類scala.Seq,能夠表現(xiàn)象序列這樣的結(jié)構(gòu)并包含許多訪問和轉(zhuǎn)換序列的方法。本章會(huì)解釋某些數(shù)組方法,更全面的討論將在第17章。

編輯推薦:Scala編程語言專題

實(shí)際上,前面展示的代碼并不完全足夠,因?yàn)樗辉试S你把不同長(zhǎng)度的元素堆疊在一起。然而本節(jié)為了讓事情保持簡(jiǎn)單,我們會(huì)任由其狀態(tài)并僅僅把相同長(zhǎng)度的元素傳遞給above。10.14節(jié)里,我們會(huì)給above做個(gè)改良,這樣客戶就能用它組合不同長(zhǎng)度的元素了。

下一個(gè)要實(shí)現(xiàn)的方法是beside。把兩個(gè)元素靠在一起,我們將創(chuàng)造一個(gè)新的元素,其中的每一行都來自于兩個(gè)元素的相應(yīng)行的串連。如前所述,為了保持事情簡(jiǎn)單我們會(huì)一開始假設(shè)兩個(gè)元素高度相同。這產(chǎn)生了方法beside的下列設(shè)計(jì):

 
 
 
  1. def beside(that: Element): Element = {
  2.  val contents = new Array[String](this.contents.length)
  3.  for (i < - 0 until this.contents.length)
  4.   contents(i) = this.contents(i) + that.contents(i)
  5.  new ArrayElement(contents)
  6. }

beside方法首先分配了一個(gè)新數(shù)組,contents,并串連this.contents和that.contents中相應(yīng)的數(shù)組元素來填充。最終產(chǎn)生了新的ArrayElement包含了新的contents。

盡管beside的這個(gè)實(shí)現(xiàn)可以工作,但它是指令式風(fēng)格,馬腳露在我們索引數(shù)組的循環(huán)。這個(gè)方法可以替代縮減成一個(gè)表達(dá)式:

 
 
 
  1. new ArrayElement(
  2.  for (
  3.   (line1, line2) < - this.contents zip that.contents
  4. ) yield line1 + line2
  5. )

這里,this.contents和that.contents兩個(gè)數(shù)組被使用zip操作符轉(zhuǎn)換為一個(gè)對(duì)子的數(shù)組(可以稱為Tupele2)。zip方法從它的兩個(gè)參數(shù)中揀出相應(yīng)的元素并組織成對(duì)子數(shù)組。

例如,表達(dá)式:

 
 
 
  1. Array(1, 2, 3) zip Array("a", "b")

將生成:

 
 
 
  1. Array((1, "a"), (2, "b"))

如果兩個(gè)操作數(shù)組的其中一個(gè)比另一個(gè)長(zhǎng),zip將舍棄余下的元素。在上面的表達(dá)式中,左操作數(shù)的第三個(gè)元素,3,沒有組成結(jié)果的部分,因?yàn)樗谟也僮鲾?shù)中沒有相對(duì)的元素。

結(jié)果數(shù)組然后通過for表達(dá)式被枚舉遍歷。這里,表達(dá)式“for ((line1, line2) < - ...”允許你在一個(gè)模式:pattern中命名對(duì)子的兩個(gè)元素,也就是說,line1現(xiàn)在代表對(duì)子的***個(gè)元素,line2代表第二個(gè)。Scala的模式匹配系統(tǒng)將在第15章描述?,F(xiàn)在,你可以就把這當(dāng)作在每次枚舉中定義兩個(gè)val,line1和line2的方式。

for表達(dá)式有個(gè)yield部分能產(chǎn)生結(jié)果。結(jié)果與枚舉遍歷的表達(dá)式類型一致,也就是說,是數(shù)組。數(shù)組的每個(gè)元素都是相應(yīng)行,line1和line2串連的結(jié)果。因此這段代碼的最終結(jié)果與前一個(gè)版本的beside一樣,不過因?yàn)樗苊饬孙@示的數(shù)組索引,結(jié)果用一種更少犯錯(cuò)的方式實(shí)現(xiàn)了。

你還需要一個(gè)顯示元素的方式。通常,可以通過定義toString方法返回元素格式化成的字串做到。下面是它的定義:

 
 
 
  1. override def toString = contents mkString "\n"

toString的實(shí)現(xiàn)使用了mkString,它被定義在所有序列中,包括數(shù)組。正如你在7.8節(jié)中看到的,像“arr mkString sep”這樣的表達(dá)式能返回?cái)?shù)組arr所有元素組成的字串。通過調(diào)用toString方法每個(gè)元素被映射為字串。分隔符字串seq被插入到連續(xù)的元素字串當(dāng)中。因此表達(dá)式“contents mkstring "\n"”格式化contents數(shù)組為字串,其中每個(gè)數(shù)組元素占據(jù)一行。

請(qǐng)注意toString沒有帶空參數(shù)列表。這個(gè)遵循了統(tǒng)一訪問原則的建議,因?yàn)閠oString是一個(gè)純的不帶任何參數(shù)的方法。

附加了這三個(gè)方法,類Element現(xiàn)在看上去如代碼10.9所展示的。

 
 
 
  1. abstract class Element {
  2.  def contents: Array[String]
  3.  def width: Int =
  4.   if (height == 0) 0 else contents(0).length
  5.  def height: Int = contents.length
  6.  def above(that: Element): Element =
  7.   new ArrayElement(this.contents ++ that.contents)
  8.  def beside(that: Element): Element =
  9.   new ArrayElement(
  10.    for (
  11.     (line1, line2) < - this.contents zip that.contents
  12.    ) yield line1 + line2
  13.   )
  14.  override def toString = contents mkString "\n"
  15. }

代碼 10.9 帶有above,beside和toString的類Element

【相關(guān)閱讀】

  1. Scala學(xué)習(xí):使用組合與繼承
  2. 在Scala中定義final成員
  3. Scala程序中如何實(shí)現(xiàn)多態(tài)和動(dòng)態(tài)綁定
  4. Scala學(xué)習(xí):調(diào)用超類構(gòu)造器和override修飾符的使用
  5. Scala:重載方法和字段及定義參數(shù)化字段


網(wǎng)站題目:如何實(shí)現(xiàn)Scala的above,beside和toString
瀏覽地址:http://www.5511xx.com/article/cooojdp.html