私はJavaslang-2.1.0-alphaとそれに相当するJavaslang-matchを使用して、オブジェクトの分解を行っています。「マッチ・ザ・ファンシー・ウェイ」セクションのダニエルによるブログ投稿によるこれによると:
Match(person).of( Case(Person("Carl", Address($(), $())), (street, number) -> ...) )
and内の 2 つのワイルドカード パターンに一致する値を取得する必要がAddress
ありますが、この例はコンパイルさえしません。後で、すべてのオブジェクトをアトミック パターン内にラップする必要があることに気付きました。つまり、"Carl" は $("Carl") になります。これは、この問題を読んだ後でした。street
number
更新されたチュートリアルに従いましたが、この例には更新がありませんでした。
例を次のように更新しました。
Person person = new Person("Carl", new Address("Milkyway", 42));
String result2 = Match(person).of(
Case(Person($("Carl"), Address($(),$())),
(street, number) -> "Carl lives in " + street + " " + number),
Case($(), () -> "not found")
);
System.out.println(result2);
それはコンパイルされますが、コンソール出力から判断すると、私の値は適切に一致していません:
Carl lives in Carl Address [street=Milkyway, number=42]
Carlと、オブジェクト全体がstreet
含まれていることは明らかです。number
Address
Carlをキャッチするために 3 番目のラムダ パラメータを追加しようとすると、次のようになります。
Case(Person($("Carl"), Address($(),$())),
(name, street, number) -> "Carl lives in " + street + " " + number)
コードをコンパイルできません。ラムダ式に赤い下線が引かれ、次のエラー テキストが表示されます。
The target type of this expression must be a functional interface
$_
最新バージョンの javaslang-match で値を無視する方法はありません。したがって、上記のように 3 つのラムダ パラメータを返すアトミック パターンのそれぞれに一致させたいと考えています。
このライブラリを理解し、最新バージョンでこのオブジェクト分解を行う方法を説明してくれる人が必要です。