Przeczytałem zalecaną mi here. Teraz zastanawiam się, do czego niektóre z tych metod są przydatne. Czy możesz pokazać przykłady użycia forall
(w przeciwieństwie do foreach
) i toList
z Option
?Przykłady użycia niektórych metod opcji Scala
Odpowiedz
Mam jeden praktyczny przykład metody toList
. Można go znaleźć w scaldi (moja ramowej wtrysk zależność Scala) w Module.scala w wierszu 72:
W tej metodzie kontekst getBindings
może wrócić albo Nil
lub List
tylko jednego elementu. Mogę go odzyskać jako Option
z discoverBinding
. Uważam, że wygodnie jest skonwertować Option
na List
(która jest pusta lub ma jeden element) za pomocą metody toList
.
Wiele metod dostępnych w Opcjach może być bardziej dostępnych dla zachowania jednolitości (z kolekcjami), niż dla ich przydatności, ponieważ wszystkie one są bardzo małymi funkcjami i dlatego nie szczędzą wiele wysiłku, ale służą celowi, a ich znaczenie jest jasne, gdy zapoznasz się ze strukturą kolekcji (jak często się mówi, opcja jest jak lista, która nie może mieć więcej niż jeden element).
forall sprawdza właściwość wartości wewnątrz opcji. Jeśli nie ma żadnej wartości, przepustka kontrolna. Na przykład, jeśli w wynajęciu samochodu, masz prawo jeden additionalDriver: Option[Person]
można zrobić
additionalDriver.forall(_.hasDrivingLicense)
dokładnie to samo, co byś zrobił, gdyby kilka dodatkowych sterowników wolno i trzeba było ich listę.
toList może być użytecznym przekształceniem. Załóżmy, że masz opcje: List [Opcja [T]], i chcesz uzyskać listę [T], z wartościami wszystkich opcji, które są Niektóre. można zrobić
for(option <- options; value in option.toList) yield value
(lub lepiej options.flatMap(_.toList)
)
map
: Pozwala przekształcić wartość "wewnątrz" anOption
, jak pewnie już wiesz naList
s. Ta operacja sprawiaOption
funktorem (można powiedzieć „endofunctor” jeśli chcesz przestraszyć swoich kolegów)flatMap
:Option
jest rzeczywiście monada, aflatMap
czyni go jednym (razem z czymś w rodzaju constuctor dla pojedynczej wartości). Tej metody można użyć, jeśli masz funkcję, która zmienia wartość wOption
, ale wartość, którą masz, jest już "opakowana" wOption
, więc zapisuje rozpakowanie przed zastosowaniem funkcji. Na przykład. jeśli masz numerOption[Map[K,V]]
, możesz napisaćmapOption.flatMap(_.get(key))
. Jeśli użyjesz tutaj prostegomap
, uzyskaszOption[Option[V]]
, ale zflatMap
otrzymaszOption[V]
. Ta metoda jest chłodniejsza niż myślisz, ponieważ pozwala łączyć funkcje w bardzo elastyczny sposób (co jest jedną z przyczyn, dla których monitory Haskell kochają).flatten
: Jeśli masz wartość typuOption[Option[T]]
,flatten
zmienia ją wOption[T]
.Jest to to samo, coflatMap(identity(_))
.orElse
: Jeśli masz kilka alternatyw zawinięte wOption
s, a chcesz pierwszy z nich, który posiada faktycznie wartość można łańcucha tych alternatyw zeorElse
:steakOption.orElse(hamburgerOption).orElse(saladOption)
getOrElse
: Get wartość wyjścia zOption
, ale podaj domyślną wartość, jeśli jest pusta, npnameOption.getOrElse("unknown")
.foreach
: Zrób coś z wartością wewnątrz, jeśli istnieje.isDefined
,isEmpty
: Określ, czy taOption
ma wartość.forall
,exists
: Sprawdza, czy dany predykat zawiera wartość.forall
jest taki sam jakoption.map(test(_)).getOrElse(true)
,exists
jest taki sam, tylko z domyślną wartościąfalse
.toList
: Niespodzianka, konwertujeOption
naList
.
- 1. MVC Przykłady użycia var
- 2. Przykłady nietrywialnego użycia fexpr
- 3. Rzeczywiste przykłady wzorców metod fabryki
- 4. Jakie są przykłady użycia Nokogiri?
- 5. Pełne przykłady użycia pakietu pySerial
- 6. Łączenie opcji Scala [Iterable [_]]
- 7. Ograniczanie opcji w scala?
- 8. Gdzie mogę znaleźć przykłady użycia bsddb?
- 9. Dobre przykłady użycia Finalizerów w C#
- 10. Shapeless: map krotki z niektórych opcji do opcji
- 11. Wiele wartości opcji w Scala
- 12. Wracając AnyVal z metod Scala
- 13. JUnit: @Przed rozpoczęciem tylko niektórych metod testowania?
- 14. Brakuje niektórych metod bezwzględnych na ByteBuffer
- 15. Przykłady świetnie wyglądających raportów SSRS pdf
- 16. W programie Scala łączenie metod obiektów jako metod klas
- 17. Scala Mapa # get i powrót niektórych()
- 18. scala try/catch nie łapie niektórych wyjątków
- 19. Jak prawidłowo używać Hashmapów i Opcji Scala?
- 20. Czy istnieje rubinowy odpowiednik opcji Scala?
- 21. Obiekt opcji Scala wewnątrz innego obiektu Option
- 22. Co to jest OSGi i jakie są przykłady jego użycia?
- 23. Czy są jakieś podstawowe przykłady użycia Rack :: Session :: Cookie?
- 24. Czy ktoś ma dobre przykłady użycia mutagenu do pisania plików?
- 25. Co to są niektóre dobre przykłady użycia Datagrid WPF?
- 26. Scala Swing: brak metod JComponent na komponencie
- 27. Metody i metody metod Scala jako parametry
- 28. Kompilacja pomija kod po stałych bloków w niektórych metod
- 29. Jak zapobiec eksportowaniu niektórych metod HTTP z mojego MongoRepository?
- 30. Dlaczego nie mogę połączyć kilku wywołań metod Scala
Twój link jest martwy (teraz) –
@AdamFraser: Przepraszam za to. Zaktualizowałem link, a także użyłem konkretnego drzewa zatwierdzeń zamiast wzorca. – tenshi