《快学Scala》(英文版:《Scala for the Impatient》),代码已传github:
https://github.com/vernonzheng/scala-for-the-Impatient
书为第一版。scala为2.11.4,jdk1.7.45,操作系统Mac OS X Yosemite 10.10.1。
第六章 对象
6.1
编写一个 Conversions 对象,加入 inchesToCentimeters,gallonsToLiters 和 milesToKilometers 方法
1 2 3 4 5
| object Conversions{ def inchesToSantimeters(value: Double) = value * 2.54 def gallonsToLiters(value: Double) = value * 3.78541178 def milesToKilometers(value: Double) = value * 1.609344 }
|
6.2
前一个练习不是很面向对象。提供一个通用的超类 UnitConversion并定义扩展该超类的 InchesToCentimeters,GallonsToLiters 和 MilesToKilometers 对象
1 2 3 4 5 6 7
| class UnitConversion(val factor: Double) { def convert(value: Double): Double = factor * value } object InchesToSantimeters extends UnitConversion(2.54) object GallonsToLiters extends UnitConversion(3.78541178) object MilesToKilometers extends UnitConversion(1.609344)
|
6.3
定义一个扩展自 java.awt.Point 的 Origin 对象。为什么说这实际上不是个好主意?(仔细看 Point 类的方法)Point 中的 getLocation 方法返回的是 Point 对象,如果想返回 Origin 对象,需要 Origin 类才行
1 2 3 4 5
| import java.awt.Point object Origin extends Point{ override def getLocation : Point = super.getLocation }
|
6.4
定义一个 Point 类和一个伴生对象,使得我们可以不用 new 而直接用 Point(3,4)来构造 Point 实例 apply 方法的使用
1 2 3 4 5
| class Point(x: Int = 0, y: Int = 0) extends java.awt.Point(x, y) object Point { def apply(x: Int = 0, y: Int = 0) = new Point(x, y) }
|
6.5
编写一个 Scala 应用程序,使用 App 特质,以反序打印命令行参数,用空格隔开。举例来说,scala Reverse Hello World 应该打印 World Hello
1 2 3
| object Reverse extends App{ args.reverse.mkString(" ") }
|
6.6
编写一个扑克牌 4 种花色的枚举,让其 toString 方法分别返回♣,♦,♥,♠
1 2 3 4 5 6 7 8 9 10
| object Suits extends Enumeration{ type Suits = Value val Spade = Value("♠") val Club = Value("♣") val Heart = Value("♥") val Diamond = Value("♦") override def toString():String={ Suits.values.mkString(",") } }
|
6.7
实现一个函数,检查某张牌的花色是否为红色
1 2 3 4 5 6 7 8
| object Suits extends Enumeration { type Suits = Value val Spade = Value("♠") val Club = Value("♣") val Heart = Value("♥") val Diamond = Value("♦") def isRed(card: Suits) = card == Heart || card == Diamond }
|
6.8
编写一个枚举,描述 RGB 立方体的 8 个角。ID 使用颜色值(例如 :红色是 0xff0000)
1 2 3 4 5 6 7 8 9 10 11 12
| object RGBCube extends Enumeration { val black = Value(0x000000, "Black") val red = Value(0xff0000, "Red") val green = Value(0x00ff00, "Green") val blue = Value(0x0000ff, "Blue") val yellow = Value(0xffff00, "Yellow") val magenta = Value(0xff00ff, "Magenta") val cyan = Value(0x00ffff, "Cyan") val white = Value(0xffffff, "White") } for( c <- RGBCube.values ) println("0x%06x: %s".format(c.id, c))
|
参考:
《快学Scala》:http://book.douban.com/subject/19971952/
(转载本站文章请注明作者和出处 Vernon Zheng(郑雪峰) – vernonzheng.com ,请勿用于任何商业用途)