Я просматриваю раздел Руководство по использованию 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
не следует запускать вне тела лямбда и т. д.
ИМХО, чего-то не хватало в объяснении, чтобы дать мне полную ясность, то есть 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.");}
io.vavr.API
- person Nándor Előd Fekete   schedule 06.02.2018import static io.vavr.API.run;
- иначе это неочевидно (и неявно напоминаетRunnable
). - person Simeon Leyzerzon   schedule 06.02.2018