Quelle est la différence entre les différentes méthodes surchargées en Scala?
Scala permet de remplacer une méthode en deux façons:
Donné super classe:
class A {
def a = "A"
}
Nous pouvons remplacer la méthode "a" par:
class B extends A {
override def a = "B"
}
et
class B extends A {
override def a() = "B"
}
les deux semblent remplacer la méthode "a" correctement. Qu'est-ce que la décision de conception derrière tout cela? Pourquoi permettre "un()" en B pour remplacer "a" dans une?
a()
et a
sont les deux méthodes nommé a
qui ne prennent pas d'arguments, autrement dit, d'arité zéro, c'est à dire qu'ils sont identiques. Pourquoi n'auraient-ils pas le permettre?OriginalL'auteur platypus | 2012-09-01
Vous devez vous connecter pour publier un commentaire.
Cela n'a pas toujours été le cas (à partir du journal des modifications de la spécification du langage):
Il est exact que ce qui semble comme une étrange conception de la décision, étant donné qu'il existe des différences observables entre sans paramètre des méthodes et des avec vide listes de paramètres. Par exemple, supposons que vous disposez des éléments suivants:
Maintenant, nous pouvons écrire la suite, comme prévu:
Et ce:
Mais pas cette:
Scala permet de faire une distinction entre les deux, ce qui évidemment doit être reflétée dans le bytecode. Supposons que nous compilons les suivantes:
Et de lancer:
Puis modifiez le code:
De recompiler et de lancer:
Et enfin vérifier les différences:
Il existe une différence—les deux versions ont des valeurs différentes pour le
ScalaSignature
annotation.À pourquoi le changement a été fait dans Scala 2.0: la spécification des notes qu'il permet:
Ma conjecture est que la langue concepteurs ne voyais pas de raison d'obliger les utilisateurs à se rappeler qui approche les méthodes de remplacement utilisé dans les cas de ce genre.
C'est un assez faible niveau implementionation détail que vous ne devriez pas besoin de s'inquiéter pour une longue période de temps, si jamais. Son rôle est de permettre la Scala compilateur de faire des distinctions de ce genre.
OriginalL'auteur Travis Brown