标签:
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.
标签:
原文地址:http://my.oschina.net/u/553266/blog/407045