我想知道爲什麼兩個類型參數(名爲「A」)具有相同的名稱(「A」)是允許按照下面的例子。我知道這是一個POOR命名的類型參數,不要這樣做。兩個同名的類型參數
(我的猜測是,它們是在一個上的不同範圍的水平,例如類水平和功能電平,並且編譯器使用某種名稱重整的)
class MyTest[A](){
type MyType = A
def checkString[A](value:A, x:MyType):A = {
value match {
case x:String => println("Value is a String")
case _ => println("Value is not a String")
}
x match {
case x:String => println("x is a String")
case _ => println("x is not a String")
}
value
}
}
實施例輸出從2.8.0
scala> val test = new MyTest[Int]
test: MyTest[Int] = [email protected]
scala> test.checkString("String",1)
Value is a String
x is not a String
res7: java.lang.String = String
scala> test.checkString(1,1)
Value is not a String
x is not a String
res8: Int = 1
由於你的格式化,這個問題變得更加難以閱讀--def塊和它下面的代碼的右括號應該被縮進。 – Submonoid 2010-09-20 13:59:43