Ich frage mich, warum die beiden Typ-Parameter (mit dem Namen "A") mit demselben Namen ("A") wie im folgenden Beispiel zulässig sind. Ich weiß, dass dies eine SCHLECHTE Benennung von Typparametern ist, tun Sie das nicht.
(Ich vermute, dass sie sich auf einer anderen Ebene befinden, z. B. auf Klassen- und Funktionsebene, und dass der Compiler eine Art von Namensmanipulation verwendet)
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
}
}
Beispielhafte Ausgabe von 2.8.0
scala> val test = new MyTest[Int]
test: MyTest[Int] = MyTest@308ff65f
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