¿Cómo modelo un valor opcional en ruby? Scala tiene Option [], que es lo que estoy buscando en ruby.¿Hay un rubí equivalente a la opción de Scala?
Respuesta
No hay equivalente en la biblioteca estándar. Tienes que definir el tuyo Ver this article.
Eso es lo que temía. Definir bien tu propio trabajo, pero usar una biblioteca/bulitin es más fácil. Gracias. – ladrl
No debería necesitarlo aunque http://stackoverflow.com/questions/5839697/why-is-the-use-of-maybe-option-not-so-pervasive-in-clojure – OscarRyz
@OscarRyz: Estoy de acuerdo con eso los tipos son un aspecto clave en la programación de orden superior, pero es perfectamente posible y plausible hacer una programación de orden superior sin tipos. Los tipos no son un elemento _mandatory_ aquí. Las mónadas son relevantes tanto en lenguajes estáticos como dinámicos (ver el minikanren de Clojure para un excelente ejemplo). La opción es una mónada. Además de proporcionar un mejor tipo de seguridad, tiene varios beneficios, como reducir el texto estándar y, al mismo tiempo, garantizar que se hayan resuelto todos los casos posibles. [..] – missingfaktor
No sé Scala, así que no puedo afirmar que es su respuesta:
En Ruby, cuando se llama a un método, se puede definir un valor predeterminado para un parámetro:
def foo(i_am_mandatory, i_am_optionnal = :banga)
puts i_am_optionnal
end
foo(:pouet, :plip)
=> :plip
foo(:pouet)
=> :banga
En ese ejemplo, puede omitir i_am_optionnal, que tiene un valor predeterminado.
HTH.
Eso no es para lo que 'Option' mónada es para. – missingfaktor
Ese era el riesgo ... Gracias a precisar :) – ook
No soy un experto en Ruby, pero no creo que haya una opción equivalente. Como Ruby está orientado a objetos, nada le impide escribir su propia implementación, pero no será tan útil como en un lenguaje estáticamente tipado, donde el compilador fuerza para que haga una comprobación adecuada de la opción vacía, que es una de los puntos principales para usar esta construcción. Por supuesto, hay otras ventajas, como la posibilidad de encadenar valores de Opción de varias maneras.
¿Has echado un vistazo a la gema Rumonade? Te da una clase de opción modelada en 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"]
No es un ejemplo de una clase en Maybe
de adt library nkpart bajo examples/common_adts.rb
. También hay otros ejemplos de ADT y la biblioteca facilita la definición de los tuyos.
Acabo de empujar una gema llamada nil_be_gone que le da una Opcional con la que puede envolver objetos. Implementa method_missing para comprobar si el valor de Optional es nulo y, si es así, simplemente devuelve otro valor nil envuelto opcional; de lo contrario, llama al método sobre el objeto y lo vuelve a envolver.
implementos nil_be_gone bind
como and_then
que le permite operaciones de la cadena sobre los tipos opcional, es métodos de retorno que recupera el valor de opcional es el valor y el funcionamiento de la unidad que envuelve un objeto en la mónada se define por self.from_value
.
- 1. ¿Hay un equivalente a SuppressWarnings en Scala?
- 2. Rubí equivalente a Python __main__
- 3. equivalente a grep -v Rubí
- 4. Scala equivalente a wsdl2java?
- 5. ¿Hay un equivalente en ggplot a la opción varwidth en la gráfica?
- 6. Rubí equivalente a una función javascript auto
- 7. Opción Scala [(A, B)] coincidencia de patrón
- 8. Conversión Opción [T] a Opción [U] en Scala
- 9. Scala equivalente a las mónadas de Haskell
- 10. Combinación de la opción Scala [Iterable [_]]
- 11. equivalente de Scala Hoogle?
- 12. ¿Hay un equivalente a la clase Bootstrap en un complemento
- 13. ¿Hay un css equivalente a 'align = "center"'?
- 14. ¿Hay un entero equivalente a __toString()
- 15. ¿Hay un Java equivalente a libevent?
- 16. ¿Hay un WPF equivalente a System.Windows.Forms.Screen?
- 17. ¿Hay un equivalente a Groovy en C#?
- 18. ¿Hay un equivalente a php.net para JavaScript?
- 19. ¿Hay un Java equivalente a MISRA C?
- 20. Rasgo de Scala: ¿hay un equivalente de campo estático público de la interfaz Java?
- 21. ¿Hay un C# equivalente a IsDebuggerPresent()?
- 22. ¿Hay un equivalente a DBus en OSX?
- 23. ¿Hay un C++ equivalente a getcwd?
- 24. ¿Hay un equivalente a HLint para Erlang?
- 25. ¿Hay un equivalente a memcpy() en Java?
- 26. ¿Hay un equivalente a typedef en C#?
- 27. Scala equivalente a Python devolver varios artículos
- 28. de matriz # giran equivalente en rubí 1.8.7
- 29. Scala equivalente a la API de expresión de C#
- 30. Equivalente de rubí obj.send en Python
¿Qué es un valor opcional? –
La gema Rumonade tiene una opción similar a una scala para ruby: https://github.com/ms-ati/rumonade –
También puedes consultar la gema monádica que implementa la mónada Maybe, que es el equivalente de la opción Scala's - https: //github.com/pzol/monadic –