Jak mogę modelować opcjonalną wartość w ruby? Scala ma Option [], czego właśnie szukam w ruby.Czy istnieje rubinowy odpowiednik opcji Scala?
Odpowiedz
Nie ma odpowiednika w standardowej bibliotece. Musisz zdefiniować swój własny. Zobacz this article.
Tego się obawiałem. Zdefiniowanie własnych dzieł dobrze, ale korzystanie z biblioteki/biuletynu jest w większości łatwiejsze. Dziękuję Ci. – ladrl
Nie powinieneś tego potrzebować, chociaż http://stackoverflow.com/questions/5839697/why-is-the-use-of-maybe-option-not-so-pervasive-in-clojure – OscarRyz
@Ocarcar: Zgadzam się, że typy są kluczowym aspektem w programowaniu wyższego rzędu, ale możliwe jest dokonywanie programowania wyższego rzędu bez typów. Typy nie są tutaj elementem mędrnym. Monady są istotne zarówno w językach statycznych, jak i dynamicznych (patrz minikanren firmy Clojure jako doskonały przykład). Opcja to monada. Oprócz zapewnienia wyższego poziomu bezpieczeństwa, ma on wiele zalet, takich jak zmniejszenie zasięgu, a jednocześnie daje pewność, że wszystkie możliwe przypadki zostały rozwiązane. [..] – missingfaktor
nie wiem Scala, więc nie można twierdzić, że twoja odpowiedź:
W Ruby, kiedy wywołać metodę, można określić wartość domyślną dla param:
def foo(i_am_mandatory, i_am_optionnal = :banga)
puts i_am_optionnal
end
foo(:pouet, :plip)
=> :plip
foo(:pouet)
=> :banga
W tym przykładzie można pominąć parametr i_am_optionnal, który ma wartość domyślną.
HTH.
To nie jest do czego służy monada "Opcja". – missingfaktor
To było ryzyko ... Dziękuję, że to sprecyzowałem :) – ook
Nie jestem ekspertem w dziedzinie Rubin, ale nie sądzę, że istnieje odpowiednik opcji. Ponieważ Ruby jest zorientowany obiektowo, nic nie stoi na przeszkodzie, aby napisać własną implementację, ale nie będzie to tak użyteczne, jak w statycznie pisanym języku, w którym kompilator musi wykonać odpowiednie sprawdzenie pustej opcji, która jest jedną z opcji. głównych punktów użycia tego konstruktu. Oczywiście istnieją inne zalety, takie jak możliwość łączenia wartości opcji na kilka sposobów.
Czy sprawdziłeś klejnot Rumonade? Daje ci klasę opcji wzorowaną na scala.
require 'rumonade'
[nil, 1, 123].map { |v| Option(v) }
=> [None, #<Rumonade::Some:0x7f2589297768 @value=1>, #<Rumonade::Some:0x7f2589297740 @value=123>]
[nil, 1, 123].map { |v| Option(v).map { |n| n.to_s }.select { |s| s.size > 2 } }.flatten
=> ["123"]
Jest przykładem klasy Maybe
w nkpart na adt library pod examples/common_adts.rb
. Istnieją również inne przykłady ADT, a biblioteka ułatwia definiowanie własnych.
Właśnie wysłałem klejnot o nazwie nil_be_gone, który daje Opcjonalnie możliwość zawijania obiektów. Implementuje on metodę method_missing, aby sprawdzić, czy wartość Opcjonalnego jest zerowa, a jeśli tak, to po prostu zwróci inną opcjonalną wartość zerową owinięcia, w przeciwnym razie wywoła metodę na obiekcie i opakuje ją ponownie.
nil_be_gone narzędzia bind
jak and_then
który pozwala na operacje na opcjonalnym typów łańcuchowych, to metody zwrotu, którą pobiera wartość z Opcjonalnie jest wartość i działanie jednostka, która zawija obiekt w monady jest zdefiniowany przez self.from_value
.
- 1. Czy istnieje odpowiednik S4 dla opcji unlist()?
- 2. Rubinowy odpowiednik PHP $ this
- 3. Czy istnieje odpowiednik scala do Pythona listowego
- 4. Czy istnieje odpowiednik Scala EnumSet/EnumMap?
- 5. Co to jest rubinowy odpowiednik python'a getattr
- 6. Czy istnieje odpowiednik Scala dla rozpakowywania listy Pythona (a.k.a. "*")?
- 7. Czy istnieje odpowiednik kodu poziomu sonaru dla Scala?
- 8. Czy istnieje odpowiednik javascript()?
- 9. Scala Hoogle odpowiednik?
- 10. Scala odpowiednik mapy Ruby?
- 11. Czy istnieje nieglobalny odpowiednik perlbrew?
- 12. Czy istnieje binarny odpowiednik System.Text.StringBuilder?
- 13. Nancy: czy istnieje odpowiednik Server.MapPath ("~ /")?
- 14. Łączenie opcji Scala [Iterable [_]]
- 15. Ograniczanie opcji w scala?
- 16. Scala odpowiednik wsdl2java?
- 17. Haskell odpowiednik Scala zbierać
- 18. Scala Nil odpowiednik dla Set
- 19. Scala odpowiednik pomocy w Pythonie()
- 20. Wiele wartości opcji w Scala
- 21. Czy istnieje workflow opcji standardowej w F #?
- 22. Czy istnieje odpowiednik opcji "--just-symbols" GNU dla łączników innych niż GNU?
- 23. Czy istnieje odpowiednik F # Seq.windowed w C#?
- 24. Czy istnieje odpowiednik zestawu Java w php?
- 25. Czy istnieje odpowiednik Java funkcji http_build_query PHP?
- 26. Czy istnieje odpowiednik __if_exists w gnu C++?
- 27. Czy istnieje odpowiednik str_replace w C++?
- 28. Czy istnieje odpowiednik Heroku dla platformy ASP.NET?
- 29. Czy istnieje odpowiednik dla języka erlang?
- 30. Czy istnieje odpowiednik usług IIS dla Tomcat?
Co to jest opcjonalna wartość? –
Klejnot rumonady ma opcję podobną do scala dla ruby: https://github.com/ms-ati/rumonade –
Można również sprawdzić monadyczny klejnot, który implementuje Monadę Maybe, która jest odpowiednikiem opcji Scala - https: //github.com/pzol/monadic –