一、概述
今天在《Scala In Programming》中学习了关于Scala的组合与继承,下面通过一个实例作为知识的巩固。
二、实例展示
1、实例名称:
根据给定的边界值,画出一个螺旋。
2、实例描述:
a、首先给出四个类:Element、ArrayElement、UniformElement、LineElemnt,其中Element为抽象的超类,其余三个类分别继承于Element。
import scalaDemo.Element._ /** * Created by user on 2016/1/18. */ abstract class Element { def contents: Array[String] def height: Int = contents.length def width: Int = contents(0).length def above(that: Element): Element = { val thisParam = this widen that.width val thatParam = that widen this.width elem(thisParam.contents ++ thatParam.contents) } def beside(that: Element): Element = { val thisParam = this highten that.height val thatParam = that highten this.height elem( for((line1,line2) <- thisParam.contents zip thatParam.contents) yield line1 + line2 ) } def widen(w: Int): Element = { if(w <= width) this else{ val left = elem(' ',(w - width)/2,height) val right = elem(' ', w - width - left.width, height) left beside this beside right } } def highten(h: Int): Element = { if(h <= height){ this }else{ val top = elem(' ', width, (h - height)/2) val bot = elem(' ', width, h - height - top.height) top above this above bot } } override def toString = contents.mkString("\n") }
/** * Created by user on 2016/1/18. */ class ArrayElement(contentsParam: Array[String]) extends Element{ override def contents: Array[String] = { contentsParam } }
/** * Created by user on 2016/1/18. */ class UniformElement(char: Char, width: Int, height: Int) extends Element{ private val line = char.toString * width override def contents: Array[String] = { Array.apply(line + ": " + height) } }
/** * Created by user on 2016/1/18. */ class LineElement(line: String) extends Element{ override def contents: Array[String] = { Array.apply(line) } }
b、定义一个object:Element
import scalaDemo.classes.{ArrayElement, LineElement, UniformElement, Element} /** * Created by user on 2016/1/18. */ object Element { def elem(contents: Array[String]): Element = { new ArrayElement(contents) } def elem(char: Char, width: Int, height: Int): Element = { new UniformElement(char,width,height) } def elem(line: String): Element = { new LineElement(line) } }
c、测试实例
import scalaDemo.Element.elem import scalaDemo.classes.Element /** * Created by user on 2016/1/18. */ object Spiral{ val space = elem(" ") val corner = elem("+") def spiral(edges: Int, direction: Int): Element = { if(edges == 1){ elem("+") }else{ val sp = spiral(edges - 1, (direction + 3) % 4) def verticalBar = elem('|',1,sp.height) def horizontalBar = elem('-',sp.width,1) if(direction == 0){ (corner beside horizontalBar) above (sp beside space) }else if(direction == 1){ (sp above space) beside (corner above verticalBar) }else if(direction == 2){ (space beside sp) above (horizontalBar beside corner) }else{ (verticalBar above corner) beside (space above sp) } } } def main (args: Array[String]) { val constents = new Array[String](3) constents(0) = "AAAAAAA" + "," constents(1) = "BBBBBBB" + "," constents(2) = "CCCCCCC" println(spiral(constents.length,3)) } }
三、测试结果
请查看附件中的图片
相关推荐
scala编程 33章 中文pdf Scala编程实战 目录 第1章字符串. 11 第2章数值39 第3章控制结构.60 第4章类和属性.103 第5章方法147 第6章对象170 第7章包和导入.190 第8章特质200 第9章函数式编程214 第10 章集合242 第...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
它是由Martin Odersky在2003年设计并实现的,融合了Java虚拟机(JVM)的优势,并引入了函数式编程的概念,使得它成为大数据处理和并发系统开发的首选语言之一。 本书“Scala编程”PDF版,为学习者提供了深入理解...
《Scala编程(第3版)》由直接参与Scala开发的一线人员编写,因而对原理的解读和应用的把握更加值得信赖。《Scala编程(第3版)》面向具有一定编程经验的开发者,目标是让读者能够全面了解和掌握Scala编程语言的核心...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
Scala编程详解:数组操作之数组转换 共5页第11讲-Scala编程详解:Map与Tuple 共8页第12讲-Scala编程详解:面向对象编程之类 共12页第13讲-Scala编程详解:面向对象编程之对象 共9页第14讲-Scala编程详解:面向对象...
《Scala编程(第3版)》面向具有一定编程经验的开发者,目标是让读者能够全面了解和掌握Scala编程语言的核心特性,并能够深入理解Scala这门语言在设计取舍背后的动因。即便是不直接使用Scala或从事一线编程工作的...
Scala编程指南第三版是针对大数据处理和分布式计算领域的一款重要参考书籍,特别是在Spark生态系统中,Scala作为基础语言,起着至关重要的作用。本指南详细介绍了Scala语言的核心概念、语法特性和高级特性,旨在帮助...
Scala编程实战(包含源码)完整版Alvin Alexander著.part1.rar
面向对象编程之类第13讲-Scala编程:面向对象编程之对象第14讲-Scala编程:面向对象编程之继承第15讲-Scala编程:面向对象编程之Trait第16讲-Scala编程:函数式编程第17讲-Scala编程:函数式编程之集合操作第18讲-...
资源包含《Scala编程》第3版英文版和第3版源代码,Scala编程第3版,目前是最新版,支持Scala 2.11以上。《Scala编程》是Scala语言的创始人参与编写的,涵盖的语法特性非常全面,并且作者解释了为什么这么设计,有...