Si une méthode est définie comme
def toList = { /* something */ }
ensuite, il doit être appelé comme
object.toList
sans les parenthèses. Nous disons que cette méthode a zéro des listes de paramètres.
On pourrait aussi définir une liste de paramètres, mais rien mis dedans:
def toList() = { /* something */ }
Maintenant, nous pourrions l'appeler de
object.toList()
object.toList
depuis Scala permet le raccourci d'omettre les parenthèses sur les appels de méthode.
Aussi loin que la JVM, il n'y a pas de différence entre la première définition ("zéro listes de paramètres") et la seconde ("un vide-liste des paramètres"). Mais Scala maintient une distinction. Si c'est une bonne idée ou pas, c'est discutable, mais la motivation peut être plus clair quand vous vous rendez compte que l'on peut aussi
def toList()() = { /* something */ }
qui est connu comme deux vide listes de paramètres, et ensuite appeler tout de
object.toList()()
object.toList()
object.toList
et maintenant, si nous étions à la convertir en une fonction, on tape comme
() => () => T /* T is the return value of the something */
tandis que la deuxième définition
() => T
qui est clairement différent sur le plan conceptuel, même si pratiquement vous utiliser de la même façon (mises en rien, et tôt ou tard, une T
).
De toute façon, toList
n'a pas besoin de paramètres, et de la Scala, le standard est de laisser tomber les parens, à moins que la méthode des modifications de l'objet lui-même (plutôt que de simplement retourner quelque chose), il est donc def toList
, sans parens par la suite. Et donc vous ne pouvez l'appeler comme object.toList
.