Je me demande pourquoi les deux types de paramètres (nommés "A") avec le même nom ("A") sont autorisés comme dans l'exemple ci-dessous. Je sais que c'est un mauvais choix des paramètres de type, ne faites pas cela.deux paramètres de type avec le même nom
(Je pense qu'ils sont sur un niveau de portée différente, par exemple le niveau de classe et niveau fonction, et le compilateur utilise une sorte de nom mangling)
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
}
}
de sortie Exemple 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
Cette question est rendue plus difficile à lire à cause de votre formatage - l'accolade fermante pour le bloc def et le code ci-dessous devrait vraiment être indenté. – Submonoid