Ich versuchte, einen Lambda-Parameter _
, z. (Eine abgespeckte Version):Warum ist ein einzelner Unterstrich ein ungültiger Name für einen Lambda-Parameter?
Consumer<Object> c = _ -> {};
wie ich, dass ein Parameter, um anzuzeigen, wollte ignoriert wurde, aber ich habe den folgenden Compiler-Fehler:
use of '_' as an identifier is forbidden for lambda parameters
Das war eine Überraschung für mich. Interessanterweise zwei Unterstrichen ist OK:
Consumer<Object> c = __ -> {}; // no compile error
Es ist also nicht der Unterstrich im allgemeinen, sondern ein einziger.
Warum ist der Name des einzelnen Unterstrichs ausdrücklich verboten?
Denken Sie daran: Nur weil zwei Unterstrichen nicht verboten ist, ist es nicht eine gute Idee zu machen. Das Ziel ist nicht, den Compiler zu überlisten, es ist Code zu schreiben, dass die armen Leute, die * Ihren Code * gelesen haben, nie eine Sekunde damit verbringen müssen, sich zu fragen, "was macht dieser Code?". –
@BrianGoetz Ich denke, die Idee ist gut. Der Anwendungsfall, der zu meiner Entdeckung führte (und echte Überraschung) war die Codierung eines Verbrauchers, der seinen Parameter nicht verwendete (um zu einer bestehenden API zu gelangen). Ich verwende normalerweise einzelne Buchstaben für Lambda-Parameternamen, also dachte ich, ich würde Spocks Spur folgen (um einen Unterstrich als Platzhalter zu verwenden), um "Ignorieren" zu vermitteln. Ich habe am Ende nur "ignorieren" als Name verwendet. Der Versuch, eine doppelte Unterstreichung vorzunehmen, war kein Umgehungsversuch; Es war ein Test, um zu bestätigen, dass nur ein einziger Unterstrich illegal war (im Gegensatz zum Unterstrich im Allgemeinen). Frohes Neues Jahr :) – Bohemian
@holger das ist kein Betrogener. Die andere Frage fragt nicht * warum *, das tut es. – Bohemian