Scala中变高变宽的实现:heighten和widen
创始人
2024-04-19 04:20:40
0

我们现在需要***一个改良。展示在代码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,能够带个宽度做参数并返回那个宽度的Element。结果包含了这个Element的内容,居中,左侧和右侧留需带的空格以获得需要的宽度。代码10.13还展示了一个类似的方法,heighten,能在竖直方向执行同样的功能。widen方法被above调用以确保Element堆叠在一起有同样的宽度。类似的,heighten方法被beside调用以确保靠在一起的元素具有同样的高度。有了这些改变,布局库可以待用了。

  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

【相关阅读】

  1. 学习Scala的定义工厂对象
  2. 如何实现Scala的above,beside和toString
  3. Scala学习:使用组合与继承
  4. 在Scala中定义final成员
  5. Scala程序中如何实现多态和动态绑定

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...