成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Scala中變高變寬的實現(xiàn):heighten和widen

開發(fā) 后端
本文節(jié)選自Martin Odersky,Lex Spoon和Bill Venners所著,Regular翻譯的《Programming in Scala》的第十章。Scala是一種針對 JVM 將函數(shù)和面向?qū)ο蠹夹g(shù)組合在一起的編程語言。

我們現(xiàn)在需要***一個改良。展示在代碼10.11中的Element的版本并不完全,因為他不允許客戶把不同寬度的元素堆疊在一起,或者不同高度的元素靠在一起。比方說,下面的表達(dá)式將不能正常工作,因為組合元素的第二行比***行要長:

  1. new ArrayElement(Array("hello")) above  
  2. new ArrayElement(Array("world!"))  
與之相似的,下面的表達(dá)式也不能正常工作,因為***個ArrayElement高度為二,而第二個的高度只是一:

  1. new ArrayElement(Array("one""two")) beside  
  2. new ArrayElement(Array("one"))  

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

代碼10.13展示了一個私有幫助方法,widen,能夠帶個寬度做參數(shù)并返回那個寬度的Element。結(jié)果包含了這個Element的內(nèi)容,居中,左側(cè)和右側(cè)留需帶的空格以獲得需要的寬度。代碼10.13還展示了一個類似的方法,heighten,能在豎直方向執(zhí)行同樣的功能。widen方法被above調(diào)用以確保Element堆疊在一起有同樣的寬度。類似的,heighten方法被beside調(diào)用以確保靠在一起的元素具有同樣的高度。有了這些改變,布局庫可以待用了。

  1. import Element.elem  
  2. abstract class Element {  
  3.  def contents: Array[String]  
  4.  def width: Int = contents(0).length  
  5.  def height: Int = contents.length  
  6.  def above(that: Element): Element = {  
  7.   val this1 = this widen that.width  
  8.   val that1 = that widen this.width  
  9.   elem(this1.contents ++ that1.contents)  
  10.  }  
  11.  def beside(that: Element): Element = {  
  12.   val this1 = this heighten that.height  
  13.   val that1 = that heighten this.height  
  14.   elem(  
  15.    for ((line1, line2) < - this1.contents zip that1.contents)  
  16.    yield line1 + line2  
  17.   )  
  18.  }  
  19.  def widen(w: Int): Element =  
  20.   if (w < = width) this 
  21.   else {  
  22.    val left = elem(' ', (w - width) / 2, height)  
  23.    var right = elem(' ', w – width - left.width, height)  
  24.    left beside this beside right  
  25.   }  
  26.  def heighten(h: Int): Element =  
  27.   if (h < = height) this 
  28.   else {  
  29.    val top = elem(' ', width, (h - height) / 2)  
  30.    var bot = elem(' ', width, h – height - top.height)  
  31.    top above this above bot  
  32.  }  
  33.  override def toString = contents mkString "\n" 
  34. }  

代碼 10.13 有了widen和heighten方法的Element

【相關(guān)閱讀】

  1. 學(xué)習(xí)Scala的定義工廠對象
  2. 如何實現(xiàn)Scala的above,beside和toString
  3. Scala學(xué)習(xí):使用組合與繼承
  4. 在Scala中定義final成員
  5. Scala程序中如何實現(xiàn)多態(tài)和動態(tài)綁定

責(zé)任編輯:book05 來源: Artima
相關(guān)推薦

2009-07-22 08:52:05

Scala動態(tài)綁定

2009-08-03 18:24:28

C# 4.0協(xié)變和逆變

2009-07-22 09:08:09

Scalaabove方法

2009-07-21 14:03:00

Scalaif表達(dá)式while循環(huán)

2009-07-20 18:03:26

Scala程序Singleton對象

2009-08-13 10:35:05

Scala數(shù)組排序

2009-07-22 07:53:00

Scala擴(kuò)展類

2009-07-08 15:35:18

Case類Scala

2009-07-22 07:45:00

Scala代碼重復(fù)

2009-09-22 09:59:40

QueueCollecScala

2009-06-16 17:54:38

Scala類語法語義

2009-09-22 10:15:42

PersistentQScala

2012-07-18 09:45:32

Java 8ScalaLambda

2009-07-22 09:43:30

Scala類型

2009-09-09 11:37:08

Scala的模式匹配

2009-07-08 12:43:59

Scala ServlScala語言

2009-05-27 11:30:20

C#Visual Stud協(xié)變

2009-07-21 17:21:57

Scala定義函數(shù)

2009-09-28 11:25:17

PersistentQKestrelScala

2023-06-30 17:56:31

Scala元組
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美日韩视频在线第一区 | 国产伦精品一区二区三区高清 | 欧美日韩亚 | 亚洲一区二区在线 | 精品久久久久久亚洲综合网站 | 激情91 | 欧美精品 在线观看 | 国产一区二区久久 | 天天插天天操 | 亚洲免费网站 | 国产成视频在线观看 | 亚洲综合日韩精品欧美综合区 | 亚洲天堂av一区 | 日韩av免费在线观看 | 91在线资源 | 日韩欧美亚洲一区 | 精品国产99 | 韩国精品在线 | 精品福利视频一区二区三区 | caoporn视频 | 精品一区二区在线观看 | 久久久久国产一级毛片高清网站 | 久久大陆| 91精品国产一区二区在线观看 | 国产日韩久久 | 国产成人一区在线 | 日本 欧美 三级 高清 视频 | 日日操夜夜操天天操 | 黄色高清视频 | 一级片免费视频 | 精品亚洲一区二区三区 | 国产精品99久久久久久宅男 | 99国产精品99久久久久久 | 激情一区二区三区 | 91丨九色丨国产在线 | 亚洲人a| 久草在线 | 免费在线黄色av | 亚洲精品久久久一区二区三区 | 成人在线免费网站 | 国产精品久久国产精品 |