¿Por qué no funciona?¿Por qué no funciona el "caso" con "cuando> 2"?
case ARGV.length
when 0
abort "Error 1"
when > 2
abort "Error 2"
end
¿Por qué no funciona?¿Por qué no funciona el "caso" con "cuando> 2"?
case ARGV.length
when 0
abort "Error 1"
when > 2
abort "Error 2"
end
Una declaración if
probablemente sería más apropiado para su código, ya que no tiene un rango/valor definitivo, sino más bien sólo un mayor que:
if ARGV.length == 0
abort "Error 1"
elsif ARGV.length > 2
abort "Error 2"
end
Bueno, no funciona porque no es una sintaxis de ruby válida. Sin embargo, usted puede hacer esto:
x = 15
case x
when 0..9 then puts "good"
when 10..12 then puts "better"
when 13..200 then puts "best"
else
puts "either great or poor"
end
No es una sintaxis de ruby válida.
Lo que se necesita es
case
when ARGV.length == 0
abort "Error 1"
when ARGV.length > 2
abort "Error 2"
end
Cuando se escribe case x
, la parte importante que hay que entender es que el rubí toma la x y luego se aplica una comparación con el argumento o expresiones se inserta en la cláusula when
.
La línea en la que se dice when x >2
lee al rubí como:
if ARGV.length == > 2
Cuando se quita un objeto específico de las declaraciones case
, se puede aplicar condicionales dentro de los when
declaraciones.
Ruby 1.8.7 + irb 0.9.5 reports (irb): 4: error de sintaxis, inesperado '>' con el conjunto de instrucciones original de OP. Mi respuesta incluye un conjunto de instrucciones reescrito. –
Lo probé en un archivo .rb, pero muestra un error de sintaxis. * & ^^% &^IRB. – Zabba
En realidad, lo que es molesto aquí es que no puedo encontrar la documentación definitiva para respaldar mi reclamo; simplemente, * sé * la respuesta. rubyspec.org y ruby-doc.org no están siendo útiles. Las especificaciones de sintaxis de lenguaje que puedo encontrar no parecen cubrir este caso. –
Uso 1.0/0.0
para conseguir el infinito, que fija el código de @ Mosch:
case ARGV.length
when 0
raise "Too few"
when 3..(1.0/0.0)
raise "Too many"
end
Usted no tiene que ser Chuck Norris dividir por un punto cero flotante.
En lugar de '(1.0/0.0)' podemos usar 'Float :: INFINITY', que se agregó en ruby 1.9.3. –
¿Cómo puedo solucionar mi código específico? Gracias. – emurad
La tuya es la única respuesta que tiene sentido para mí, verdaderamente idiomática y elegante. Es lo que he usado también. –