标签:
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