Cuál es la manera sensata de decir esto.elegante encadenado 'o de para las pruebas sobre una misma variable en Ruby
if @thing == "01" or "02" or "03" or "04" or "05"
(Los números están contenidos en una columna de cadena de tipo de datos.)
Cuál es la manera sensata de decir esto.elegante encadenado 'o de para las pruebas sobre una misma variable en Ruby
if @thing == "01" or "02" or "03" or "04" or "05"
(Los números están contenidos en una columna de cadena de tipo de datos.)
Hacer una matriz y utilizar .include?
if ["01","02","03","04","05"].include?(@thing)
Si los valores son en realidad todos consecutivos, se puede utilizar una gama como (1..5).include?
Para las cadenas, puede utilizar:
if ("01".."05").include?(@thing)
O en este caso particular, '("01" .. "05"). Incluyen? (@ Cosa)' –
Si sólo matrices Ruby había búsqueda binaria, esto podría tomar 'O (log n)' 'tiempo en lugar de O (n) 'tiempo. –
@ MДΓΓБДLL:.? Ruby tiene conjuntos, por lo que 'Set.new ("01" .. "05") incluyen' 'sería O (1)'. –
O utilizar un caso st atement:
case @thing
when "01", "02", "03", "04", "05"
# do your things
end
Dos variaciones de este enfoque:
case @thing
when "01".."05"
# do your things
end
case @thing
when *%w[01 02 03 04 05]
# do your things
end
Debido a que utiliza case
===
, también se podría escribir: ("01".."05") === @thing
Bueno, no sabía que podía usar el operador splat en las ramas 'when'. –
El operador '===' es engañoso, en mi humilde opinión, ya que significa algo completamente diferente en otros idiomas donde está disponible. 'include?' es mucho más legible. –
Estoy de acuerdo contigo, nunca lo he usado de esa manera;) –
El correcta, pero la versión prolija podrías 'si @thing == "01" || @thing == "02" || ... ' –
Tenga en cuenta que [' y '/' o '* no * es lo mismo que' '&& /' '|| en Ruby] (http://devblog.avdi.org/2010/08/02/using-and-and-or-in-ruby /). –