【发布时间】:2018-07-16 01:31:28
【问题描述】:
我正在浏览 Vavr Usage Guide 的部分,该部分是关于使用 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 主体之外运行等。
恕我直言,解释中缺少让我完全清楚的东西,即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.");}
【问题讨论】:
-
不确定您使用的是什么 IDE,但如果是 Eclipse,您可以通过 Preferences -> Java/Editor/Content Assist 设置自动导入的代码完成/Favorites -> 新类型... ->
io.vavr.API -
是的,我正在使用 Eclipse,谢谢。
-
也许可以通过提及
import static io.vavr.API.run;来增强文档 - 否则并不明显(并且隐含地让人想起Runnable)。
标签: java-8 functional-programming pattern-matching vavr