Me pregunto por qué los dos parámetros de tipo (llamados "A") con el mismo nombre ("A") están permitidos según el ejemplo a continuación. Sé que este es un mal nombre de los parámetros de tipo, no hagas esto.dos parámetros de tipo con el mismo nombre
(Mi conjetura es que están en un nivel en un ámbito diferente, por ejemplo, el nivel de clase y la función de nivel, y el compilador está utilizando algún tipo de renombrado de nombres)
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
}
}
Ejemplo de salida de 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
Esta pregunta se hace bastante más difícil de leer debido a su formateo - el corsé de cierre para el bloque de def y el código debajo de él realmente deberían estar sangrados. – Submonoid