Given snippet komponuje wywołań metod, które zwracają typ opcji. Chciałbym zadzwonić do następnej metody, jeśli poprzednie połączenie zwróciło Brak. Mogę to zrobić z tym fragmentem, ale wygląda to dość niechlujnie. Mam więc nadzieję, że istnieje lepszy sposób na zrobienie tego.Czy istnieje sposób łańcuch metod, które zwracają Option-Type w sposób taki jak getOrElse, ale zachowuje typ opcji
Odpowiedz
Tak, orElse
jest trochę czystsze:
def amountToPay : Option[TextBoxExtraction] =
getMaxByFontsize(keywordAmountsWithCurrency)
.orElse(getMaxByFontsize(keywordAmounts))
.orElse(highestKeywordAmount)
.orElse(getMaxByFontsize(amountsWithCurrency))
.orElse(highestAmount)
Można też po prostu umieścić elementy w Seq
a następnie użyć czegoś podobnego xs.reduceLeft(_ orElse _)
lub xs.flatten.headOption.getOrElse(highestAmount)
.
@Nicolas, Zgadzam się, że twoja wersja jest trochę czystsza, ale średnik wnioskowanie ugryzie cię w REPL. –
': paste' zrobi lewę w REPL (chciałbym, abyśmy mogli zaproponować edycję w stackoverflow zamiast bezpośredniego zgłaszania zmian) – Nicolas
Och, jest też problem, że parentetyzacja w mojej wersji była _wrong_. Więc twoje jest o wiele lepsze. –
- 1. Czy istnieje niepoprawny sposób łączenia wyników funkcji, które zwracają wartości opcji?
- 2. Nazewnictwo metod java, które zwracają strumienie
- 3. Czy istnieje taki "uniwersalny" typ Haskella?
- 4. Czy istnieje paradigmatyczna Scala dla yield-getOrElse, czy jest lepszy sposób?
- 5. Czy istnieje sposób przeciążania metod rozszerzeń w C#?
- 6. Czy istnieje sposób na usunięcie wszystkich lepkich opcji w CVS?
- 7. Czy istnieje prosty sposób logowania się do metod, które są wywoływane na obiekcie w Ruby?
- 8. Dlaczego łańcuch zachowuje się jak typ wartości podczas używania ==
- 9. Czy istnieje sposób na zmianę opcji kompilacji gcc dla klejnotów?
- 10. czy istnieje sposób drukowania pliku konfiguracyjnego dla opcji programu doładowania?
- 11. Czy zmienne słowo kluczowe C# i java zachowuje się w taki sam sposób?
- 12. Czy istnieje sposób użycia metod C# bezpośrednio jako delegatów?
- 13. Jak mogę zablokować łańcuch metod w Sinon?
- 14. Jak połączyć kwerendy LINQ z lambdas, które zwracają anonimowy typ?
- 15. Czy można w sposób dynamiczny oceniać łańcuch zawierający prawidłowy LINQ?
- 16. Czy istnieje sposób, aby wymusić typ zwracanej Arrays.asList
- 17. Czy istnieje sposób kontrolowania, które repozytoria Leiningen będą domyślnie wyszukiwać?
- 18. UIActivityViewController - czy istnieje sposób sprawdzenia, które działanie zostało wybrane?
- 19. Czy łańcuch metod można nazwać LINQ?
- 20. Czy istnieje sposób na sprawdzenie, które klasy załadowała usługa ClassLoader?
- 21. Czy istnieje sposób użycia "używania", ale pozostawić plik otwarty?
- 22. Czy łańcuchy klas CSS w taki sposób są ważne?
- 23. Czy w Eclipse istnieje sposób na zmianę poziomu zgodności ECMAScript?
- 24. Czy istnieje sposób statycznego wykonywania wiązania C#?
- 25. Czy istnieje sposób, aby zleceniowe NSWindow spacjami
- 26. Czy istnieje sposób wyszukiwania historii w nrepl?
- 27. Czy istnieje prosty sposób na rangi na wielu kryteriach, które zachowują więzi w R?
- 28. Które reguły określają, czy obiekt można w łatwy sposób kopiować?
- 29. Czy istnieje typ "Any" w haskell?
- 30. Czy istnieje sposób wykrywania blokerów Flash?
Nie to, czego szukasz, ale jeśli chcesz osiągnąć sukces łańcuchowy (użyj 'Some x' jako danych wejściowych do następnej funkcji) możesz użyć' for': 'for (myWife <- getSpouse (me); mySIL <- getSister (myWife); myBIL <- getSpouse (mySIL); myBro <- getBrother (mnie); if (myBro == myBIL)) dają myBro' – rampion