码迷,mamicode.com
首页 > 其他好文 > 详细

快学Scala 第17章 - 类型参数 习题解答

时间:2015-04-28 08:19:26      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

1. 定义一个不可变类Pair[T,S],带一个swap方法,返回组件交换过位置的新对偶。

package ex17_01
object Main extends App {
  val p = new Pair(97 -> ‘a‘)
  val a = p.swap
  println(a)
}
class Pair[T, S](val p: (T, S)) {
  def swap = {
    (p._2, p._1)
  }
}
/*output:
(a,97)
*/

 

2. 定义一个可变类Pair[T],带一个swap方法,交换对偶中组件的位置。

package ex17_02
object Main extends App {
  val p = new Pair(97 -> ‘a‘)
  println(p.swap)  
  p.p = 98 -> ‘b‘
  println(p.swap)
}
class Pair[T](var p: (T, T)) {
  def swap = {
    (p._2, p._1)
  }
}
/*output:
(a,97)
(b,98)
*/

 

3.  给定类Pair[T,S],编写一个泛型方法swap,接受对偶作为参数并返回组件交换过位置的新对偶。

package ex17_03
object Main extends App {
  val p = new Pair
  println( p.swap( 97 -> ‘a‘ ) )
}
class Pair[T, S] {
  def swap[T, S](p: (T, S)) = {
    (p._2, p._1)
  }
}
/*output:
(a,97)
*/

 

4. 在17.3节中,如果我们想把Pair[Person]的第一个组件替换成Student,为什么不需要给replaceFirst方法定一个下界?

回答:因为Student是Pair的子类(型),所以不需要给replaceFirst方法定一个下界即可把Pair[Person]的第一个组件替换成Student。

package ex17_04
object Main extends App {
  val p1 = new Person
  val p2 = new Person
  val s1 = new Student
  val pair = new Pair(p1, p2)
  pair.replaceFirst(s1) //返回值类型为  Pair[Person]
}
class Pair[T](val first: T, val second: T) {
  def replaceFirst(newFirst: T) = new Pair[T](newFirst, second)
}
class Person
class Student extends Person
/*output:
(a,97)
*/

 

5.  为什么RichInt实现的是 Comparable[Int]而不是Comparable[RichInt]?

回答:RichInt是Int的富包装类,提供了很多便捷方法,其目的不是为了取代Int而是增强Int。

而接口 Comparable 位于 java.lang包。实现  Comparable[Int] 比 实现 Comparable[RichInt] 通用得多。

package ex17_05
import scala.runtime.RichInt
object Main extends App {
  val a = new RichInt(1)
  val b = new RichInt(2)
  val c = 3
  //println ( a max b) //type mismatch; found : scala.runtime.RichInt required: Int
  println ( a max c)
}
/*output:
3
*/

6. 编写一个泛型方法middle,返回任何Iterable[T]的中间元素。举例来说,middle["World"]应得到‘r‘。

package ex17_06
object Main extends App {
  def middle[T](it: Iterable[T]): T = {
    def list = it.toList
    list(list.size / 2)
  }
  val str = "World"
  println("%s‘s middle is %c".format(str, middle(str)))
}
/*output:
World‘s middle is r
*/

7.

8.

9.

10.


快学Scala 第17章 - 类型参数 习题解答

标签:

原文地址:http://my.oschina.net/u/553266/blog/407045

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!