Scala中的Spiral程序:把代码都螺旋在一起

开发 后端
本文节选自Martin Odersky,Lex Spoon和Bill Venners所著,Regular翻译的《Programming in Scala》的第十章。Scala是一种针对 JVM 将函数和面向对象技术组合在一起的编程语言。

操练布局库所有这些元素的好玩儿的方法就是写一个画给定数量边界的螺旋的程序。这个Spiral程序,展示在代码10.14中,是这么做的:

51CTO编辑推荐:Scala编程语言专题

  1. import Element.elem  
  2. object Spiral {  
  3.  val space = elem(" ")  
  4.  val corner = elem("+")  
  5.  def spiral(nEdges: Int, direction: Int): Element = {  
  6.   if (nEdges == 1)  
  7.    elem("+")  
  8.   else {  
  9.    val sp = spiral(nEdges - 1, (direction + 3) % 4)  
  10.    def verticalBar = elem('|'1, sp.height)  
  11.    def horizontalBar = elem('-', sp.width, 1)  
  12.    if (direction == 0)  
  13.     (corner beside horizontalBar) above (sp beside space)  
  14.    else if (direction == 1)  
  15.     (sp above space) beside (corner above verticalBar)  
  16.    else if (direction == 2)  
  17.     (space beside sp) above (horizontalBar beside corner)  
  18.    else 
  19.     (verticalBar above corner) beside (space above sp)  
  20.   }  
  21.  }  
  22.  def main(args: Array[String]) {  
  23.   val nSides = args(0).toInt  
  24.   println(spiral(nSides, 0))  
  25.  }  
  26. }  
代码 10.14 Spiral程序

因为Spiral是个带有合适签名的main方法的独立的对象,所以它是个Scala程序。Spiral带一个命令行参数,一个整数,并且以特定数量的边界画一个螺旋。例如,可以像展示在下面的左边那样画一个六边界的螺旋,或者右边的那样更大的螺旋:(略)

【相关阅读】

  1. Scala中变高变宽的实现:heighten和widen
  2. 学习Scala的定义工厂对象
  3. 如何实现Scala的above,beside和toString
  4. Scala学习:使用组合与继承
  5. 在Scala中定义final成员

责任编辑:book05 来源: Artima
相关推荐

2020-09-16 11:20:40

PythonBashLinux

2018-02-01 21:18:40

戴尔

2018-07-30 16:04:09

ReactJS代码HTML

2016-08-12 09:49:06

Intel

2013-08-06 09:49:01

2009-11-06 08:57:31

WCF开发

2011-01-20 11:42:49

同事

2015-03-05 10:27:56

苹果IBM

2017-11-15 08:26:52

IntelAMD技术

2015-10-20 16:48:06

AnsibleDocker可扩展设计

2014-08-12 09:54:35

Web语言编程语言

2015-04-22 17:22:05

eBay京东

2016-09-02 16:49:54

APPVR

2015-02-09 19:49:19

畅捷通

2020-06-12 11:08:39

应用程序集成自动化

2023-03-30 16:23:09

人工智能AI

2009-11-20 12:09:40

ExchangeVPNWindowsServ

2019-06-12 06:52:39

操作系统Windows终端

2013-05-31 09:03:47

SkypeLync集成

2019-01-03 13:58:53

人工智能大数据数据分析
点赞
收藏

51CTO技术栈公众号