2011-06-01 7 views

risposta

6

Un if dichiarazione sarebbe probabilmente più adatta per il vostro codice, dal momento che non si dispone di una gamma/valore definitivo, ma piuttosto solo una maggiore di:

if ARGV.length == 0 
    abort "Error 1" 
elsif ARGV.length > 2 
    abort "Error 2" 
end 
15

Bene, non funziona perché non è una sintassi ruby ​​valida. Tuttavia, si può fare questo:

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 
+3

Come posso risolvere il mio codice specifico? Grazie. – emurad

+0

La tua è l'unica risposta che ha senso per me - veramente idiomatica ed elegante. È quello che ho usato anche io. –

35

Non è una sintassi ruby ​​valida.

Quello che vi serve è

case 
    when ARGV.length == 0 
    abort "Error 1" 
    when ARGV.length > 2 
    abort "Error 2" 
end 

Quando si scrive case x, la parte importante che dovete capire è che rubino prende il x e poi applica un confronto con l'argomento o espressioni si inserisce nella clausola when.

La linea in cui si dice when x >2 legge al rubino come:

if ARGV.length == > 2 

Quando si rimuove un oggetto specifico dalle case dichiarazioni, è possibile applicare i condizionali all'interno delle when dichiarazioni.

+1

Ruby 1.8.7 + irb 0.9.5 reports (irb): 4: errore di sintassi, imprevisto '>' con il set di istruzioni originale dell'OP. La mia risposta include un set di istruzioni riscritte di lavoro. –

+0

L'ho provato in un file .rb, quindi mostra un errore di sintassi. * & ^^% e^​​IRB. – Zabba

+0

In realtà ciò che è fastidioso qui è che non riesco a trovare la documentazione definitiva per supportare la mia richiesta, mi è appena capitato di * conoscere * la risposta. rubyspec.org e ruby-doc.org non sono utili. Le specifiche sulla sintassi della lingua che riesco a trovare non sembrano coprire questo caso. –

19

Usa 1.0/0.0 per arrivare all'infinito, che fissa il codice di @ Mosch:

case ARGV.length 
    when 0 
    raise "Too few" 
    when 3..(1.0/0.0) 
    raise "Too many" 
end 

Non c'è bisogno di essere Chuck Norris di dividere per un punto zero flottante.

+9

Invece di '(1.0/0.0)' possiamo usare 'Float :: INFINITY', che è stato aggiunto in rubino 1.9.3. –

Problemi correlati