J'ai essayé de nommer un paramètre lambda _
, par ex. (Une version réduite):Pourquoi un seul caractère de soulignement est-il un nom illégal pour un paramètre lambda?
Consumer<Object> c = _ -> {};
que je voulais signifier qu'un paramètre a été ignoré, mais je suis l'erreur du compilateur suivant:
use of '_' as an identifier is forbidden for lambda parameters
Ce fut une surprise pour moi. Fait intéressant, deux underscores est OK:
Consumer<Object> c = __ -> {}; // no compile error
Il est donc pas le caractère underscore en général, mais un seul.
Pourquoi le nom de soulignement unique est-il spécifiquement interdit?
Rappelez-vous: juste parce que deux underscores est pas interdit, ne fait pas une bonne idée. Le but n'est pas de déjouer le compilateur, c'est d'écrire du code que les pauvres qui ont * lu * votre code n'auront jamais à passer une seconde à se demander "qu'est-ce que ce code fait". –
@BrianGoetz Je pense que l'idée est bonne. Le cas d'utilisation qui a conduit à ma découverte de cette (et véritable surprise) codait un consommateur qui n'utilisait pas son paramètre (pour passer à une API existante). J'utilise généralement des lettres simples pour les noms de paramètres lambda, donc j'ai pensé que je suivrais l'exemple de Spock (d'utiliser un trait de soulignement comme caractère générique) pour transmettre "ignorer". J'ai fini par utiliser "ignore" comme nom. Essayer un double trait de soulignement n'était pas une tentative de contournement; c'était un test pour confirmer que seulement un trait de soulignement était illégal (plutôt que le caractère de soulignement en général). Bonne année :) – Bohemian
@holger ce n'est pas une dupe. L'autre question ne demande pas * pourquoi *, c'est le cas. – Bohemian