1. 程式人生 > >快學Scala習題解答—第六章 物件

快學Scala習題解答—第六章 物件

6 物件

6.1 編寫一個Conversions物件,加入inchesToCentimeters,gallonsToLiters和milesToKilometers方法
Scala程式碼  收藏程式碼
  1. object Conversions{  
  2.     def inchesToCentimeters(){}  
  3.     def gallonsToLiters(){}  
  4.     def milesToKilometers(){}  
  5. }  

6.2 前一個練習不是很面向物件。提供一個通用的超類UnitConversion並定義擴充套件該超類的InchesToCentimeters,GallonsToLiters和MilesToKilometers物件

Scala程式碼  收藏程式碼
  1. abstract class UnitConversion{  
  2.   def inchesToCentimeters(){}  
  3.   def gallonsToLiters(){}  
  4.   def milesToKilometers(){}  
  5. }  
  6. object InchesToCentimeters extends UnitConversion{  
  7.   override def inchesToCentimeters() {}  
  8. }  
  9. object GallonsToLiters extends UnitConversion{  
  10.   override def gallonsToLiters() {}  
  11. }  
  12. object MilesToKilometers extends UnitConversion{  
  13.   override def milesToKilometers() {}  
  14. }  

6.3 定義一個擴充套件自java.awt.Point的Origin物件。為什麼說這實際上不是個好主意?(仔細看Point類的方法)


Point中的getLocation方法返回的是Point物件,如果想返回Origin物件,需要Origin類才行 
Scala程式碼  收藏程式碼
  1. object Origin extends Point with App{  
  2.   override def getLocation: Point = super.getLocation  
  3.   Origin.move(2,3)  
  4.   println(Origin.toString)  
  5. }  

6.4 定義一個Point類和一個伴生物件,使得我們可以不用new而直接用Point(3,4)來構造Point例項
apply方法的使用 
Scala程式碼  收藏程式碼
  1. class Point(x:Int,y:Int){  
  2.   override def toString: String = "x = " + x + " y = " + y  
  3. }  
  4. object Point extends App{  
  5.   def apply(x:Int,y:Int)={  
  6.     new Point(x,y)  
  7.   }  
  8.   val p = Point(1,2)  
  9.   println(p)  
  10. }  

6.5 編寫一個Scala應用程式,使用App特質,以反序列印命令列引數,用空格隔開。舉例來說,scala Reverse Hello World應該列印World Hello
Scala程式碼  收藏程式碼
  1. object Reverse extends App{  
  2.   args.reverse.foreach(arg => print(arg  + " "))  
  3. }  

6.6 編寫一個撲克牌4種花色的列舉,讓其toString方法分別返回♣,♦,♥,♠
Scala程式碼  收藏程式碼
  1. object Card extends Enumeration with App{  
  2.   val M = Value("♣")  
  3.   val T = Value("♠")  
  4.   val H = Value("♥")  
  5.   val F = Value("♦")  
  6.   println(Card.M)  
  7.   println(Card.T)  
  8.   println(Card.H)  
  9.   println(Card.F)  
  10. }  

6.7 實現一個函式,檢查某張牌的花色是否為紅色
Scala程式碼  收藏程式碼
  1. object Card extends Enumeration with App{  
  2.   val M = Value("♣")  
  3.   val T = Value("♠")  
  4.   val H = Value("♥")  
  5.   val F = Value("♦")  
  6.   def color(c:Card.Value){  
  7.     if(c == Card.M || c == Card.T) print("Black")  
  8.     else print("Red")  
  9.   }  
  10.   color(Card.H)  
  11. }  

6.8 編寫一個列舉,描述RGB立方體的8個角。ID使用顏色值(例如:紅色是0xff0000)

Scala程式碼  收藏程式碼
  1. object RGB extends Enumeration with App{  
  2.   val RED = Value(0xff0000,"Red")  
  3.   val BLACK = Value(0x000000,"Black")  
  4.   val GREEN = Value(0x00ff00,"Green")  
  5.   val CYAN = Value(0x00ffff,"Cyan")  
  6.   val YELLOW = Value(0xffff00,"Yellow")  
  7.   val WHITE = Value(0xffffff,"White")  
  8.   val BLUE = Value(0x0000ff,"Blue")  
  9.   val MAGENTA = Value(0xff00ff,"Magenta")