當函數旁邊有泛型類型時,表示該函數是泛型函數。
下面是一個很簡單的例子:
// generic functions which returns type of `A`
def test1[A](x: A) = x
def test2[A](x: => A) = { println("Hello"); x }
val x1 = test1(1)
// x1: Int = 1
val x2 = test1("Hello World")
// x2: java.lang.String = Hello World
val x3 = test2(123.4)
// Hello
// x3: Double = 123.4
val x4 = test2("Test2")
// Hello
// x4: java.lang.String = Test2
正如你所看到的,test1
和test2
返回類型是通過它們的參數的類型決定。
以下是另一個用例。
// We could implement `map` function ourself.
// We don't care about what type of List contains,
// so we make it a generic function.
def map[A, B](xs: List[A], f: A => B): List[B] = {
var result: List[B] = Nil
for (i <- xs) {
result ++= List(f(i))
}
result
}
// Now use can map any type of List to another List.
map(List("1", "2", "3"), (x: String) => x.toInt)
//res1: List[Int] = List(1, 2, 3)
你能否提供一個來自Scala庫的特定示例?這不是我通常看到的。 (我想不出一個例子。) – 2012-03-08 15:03:02
這可能是相關的:http://stackoverflow.com/questions/7933786 – 2012-03-08 15:04:55
謝謝!這似乎解釋了它。 這裏是我看到它的代碼。 https://github.com/playframework/Play20/blob/master/framework/src/play/src/main/scala/play/api/db/DB.scala 具體是withConnection函數。雖然我的例子在這種情況下沒有意義,因爲我提供了Unit類型作爲塊的返回碼。 – 2012-03-08 15:18:26