Perché non funziona?Perché il "caso" con "quando> 2" non funziona?
risposta
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
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
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.
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. –
L'ho provato in un file .rb, quindi mostra un errore di sintassi. * & ^^% e^IRB. – Zabba
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. –
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.
Invece di '(1.0/0.0)' possiamo usare 'Float :: INFINITY', che è stato aggiunto in rubino 1.9.3. –
- 1. Perché os.path.join() non funziona in questo caso?
- 2. Perché 2..toString() funziona?
- 3. Perché respondsToSelector non funziona per me in questo caso?
- 4. Perché l'inferenza di tipo generico non funziona in questo caso?
- 5. angolare 2 AsynPipe non funziona con un'osservabile
- 6. Perché l'admin di Django list_select_related non funziona in questo caso?
- 7. Perché il riciclaggio non funziona?
- 8. perché il semaforo non funziona?
- 9. find_or_initialize_by non funziona con 2 colonne
- 10. Perché il trim non funziona?
- 11. highlight.js non funziona con angolare 2
- 12. res.download() non funziona nel mio caso
- 13. Perché il tkinter non funziona bene con il multiprocessing?
- 14. Perché il mio CGGradient non funziona con un UIColor preimpostato?
- 15. Perché ArrayList.remove non funziona
- 16. Perché makecontext non funziona con pthreads
- 17. Perché TransactionScope non funziona con Entity Framework?
- 18. Perché l'operazione di trasmissione fallisce nel caso 1 ma succede nel caso 2?
- 19. Perché "extern template" non funziona con shared_ptr?
- 20. Perché il confronto non funziona in CONVERT?
- 21. divisione Android con spazio non funzionante per questo caso. Perché?
- 22. Perché il mio byte non funziona?
- 23. Perché MenuItem non funziona con DynamicResource?
- 24. Perché il mio lambda non funziona?
- 25. Magento 2: reindexing non funziona
- 26. Perché l'ottimizzazione GCC non funziona con valarrays?
- 27. perché il metodo sincronizzato non funziona per il multithread
- 28. Perché il Refcount è 2 non 1?
- 29. Perché il confronto delle stringhe non funziona?
- 30. Perché il `layout nil` non funziona?
Come posso risolvere il mio codice specifico? Grazie. – emurad
La tua è l'unica risposta che ha senso per me - veramente idiomatica ed elegante. È quello che ho usato anche io. –