自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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的版本并不完全,因為他不允許客戶把不同寬度的元素堆疊在一起,或者不同高度的元素靠在一起。比方說,下面的表達式將不能正常工作,因為組合元素的第二行比***行要長:

  1. new ArrayElement(Array("hello")) above  
  2. new ArrayElement(Array("world!"))  
與之相似的,下面的表達式也不能正常工作,因為***個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-20 18:03:26

Scala程序Singleton對象

2009-07-21 14:03:00

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

2009-08-13 10:35:05

Scala數(shù)組排序

2009-06-16 17:54:38

Scala類語法語義

2009-09-22 10:15:42

PersistentQScala

2012-07-18 09:45:32

Java 8ScalaLambda

2009-09-22 09:59:40

QueueCollecScala

2009-07-22 07:53:00

Scala擴展類

2009-07-08 15:35:18

Case類Scala

2009-07-22 07:45:00

Scala代碼重復(fù)

2009-07-22 09:43:30

Scala類型

2023-06-30 17:56:31

Scala元組

2023-06-12 15:33:52

Scalafor循環(huán)語句

2009-09-09 11:37:08

Scala的模式匹配

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
點贊
收藏

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