ラムダパラメータ_
の名前を付けてみました。 (バージョンをダウンカット):単一のアンダースコア文字がラムダパラメータの不正な名前であるのはなぜですか?
Consumer<Object> c = _ -> {};
私はパラメータは無視されていたことを意味したかったが、私は次のコンパイラエラーを得たとして:
use of '_' as an identifier is forbidden for lambda parameters
これは私にとって驚きでした。興味深いことに、アンダースコアはOKです:
Consumer<Object> c = __ -> {}; // no compile error
だから、それは一般的にアンダースコア文字が、単一のものではありません。
なぜ単一のアンダースコア名は特に禁止されていますか?
ただ覚えている:2つの下線が禁止されていないという理由だけで、それは良いアイデアことはありません。目標はコンパイラを凌駕することではなく、あなたのコードを読んだ貧しい人々が、このコードが何をするのかという第二の疑問を抱かせることは決してありません。 –
@BrianGoetz私はその考えが良いと思います。これを発見したユースケース(および本物の驚き)は、パラメータを使用していない(既存のAPIに渡す)消費者をコーディングするケースでした。私は一般的にラムダのパラメータ名に一文字を使用するので、私は "無視"を伝えるためにspockのリード(ワイルドカードとしてアンダースコアを使う)に従うと思った。私はちょうど名前として "無視"を使用して終了しました。ダブルアンダースコアを試してみるのは、迂回を試みる試みではありませんでした。単一のアンダースコアが(一般的なアンダースコアではなく)違法であることを確認するテストでした。ハッピーニューイヤー: – Bohemian
@holgerこれは偽ではありません。もう一つの質問は*なぜ*、これはしません。 – Bohemian