我正在阅读Vavr 使用指南的部分,该部分是关于使用 Match 和他们所说的其他“语法糖”执行副作用的。这是那里给出的示例:
Match(arg).of(
Case($(isIn("-h", "--help")), o -> run(this::displayHelp)),
Case($(isIn("-v", "--version")), o -> run(this::displayVersion)),
Case($(), o -> run(() -> {
throw new IllegalArgumentException(arg);
}))
);
然后讨论如何run
不应该在 lambda body 之外运行,等等。
恕我直言,解释中缺少一些东西来让我完全清楚,即run
某个 Vavr 接口上的现有方法(我找不到)还是应该是我自己在周围代码库中的方法?
所以我努力拼写出上面的例子,只是为了让我可以运行并查看它的结果:
@Test public void match(){
String arg = "-h";
Object r = Match(arg).of(
Case($(isIn("-h", "--help")), o -> run(this::displayHelp)),
Case($(isIn("-v", "--version")), o -> run(this::displayVersion)),
Case($(), o -> run(() -> {
throw new IllegalArgumentException(arg);
}))
);
System.out.println(r);
}
private Void run(Supplier<String> supp) {
System.out.println(supp.get());
return null;}
private String displayHelp() {return "This is a help message.";}
private String displayVersion() {return "This is a version message.";}
有人可以确认我在 Vavr 的设计师所设想的功能方面处于正确的轨道上,还是我完全偏离了切线,在这种情况下,我希望得到一些关于它应该如何的指导。
先感谢您。
更新:
import static io.vavr.API.run;
@Test public void match1() {
String arg = "-h";
Object r = Match(arg).of(
Case($(isIn("-h", "--help")), o -> run(this::displayHelp)),
Case($(isIn("-v", "--version")), o -> run(this::displayVersion)),
Case($(), o -> run(() -> {
throw new IllegalArgumentException(arg);
}))
);
System.out.println("match: " +r);
}
//private Void run(Supplier<Void> supp) {supp.get();}
private void displayHelp() {System.out.println("This is a help message.");}
private void displayVersion() {System.out.println("This is a version message.");}