《快学scala》习题解答-第六章-对象

《快学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 ,请勿用于任何商业用途)