Sto scrivendo un gioco di impiccato in rubino e volevo usare una dichiarazione del caso per determinare quale parte del corpo collocare in corrispondenza di un numero di ipotesi sbagliate. Ho realizzato questo gioco usando una classe di board che uso per altri giochi come gli scacchi e connect-4 perché ho un metodo che serializza la classe della board permettendomi di salvare e caricare il gioco senza alcun codice aggiuntivo. Per il salvataggio del gioco, avevo bisogno di un modo per determinare il numero di tentativi errati per il boia senza aggiungere variabili extra alla classe della scheda. Per risolvere questo problema ho usato una variabile di istanza sulla classe della scheda chiamata history, che può essere utilizzata per spingere le mosse dal gioco alla cronologia delle schede. Quando la scheda viene serializzata, viene salvata anche la cronologia, che può essere letta dal gioco e utilizzata per determinare le ipotesi errate.L'affermazione del caso di ruby viene meno?
Nel gioco dell'impiccato, ho un metodo chiamato cronologia di lettura (che utilizzo per tutti i giochi poiché risolve il problema di serializzazione descritto sopra). Il metodo read_history è responsabile della lettura delle ipotesi precedenti, della loro visualizzazione e della determinazione del numero di tentativi errati. Questo numero viene quindi passato a un metodo di sospensione che determina quali parti del corpo del boia aggiungere.
def hang(incorrect)
case incorrect
when 0
@hangman = [" ", " ", " "]
break
when 7
@hangman[2][2] = '\\'
when 6
@hangman[2][0] = '/'
when 5
@hangman[2][1] = '*'
when 4
@hangman[1][2] = '\\'
when 3
@hangman[1][0] = '/'
when 2
@hangman[1][1] = '|'
when 1
@hangman[0][1] = 'o'
end
end
Se dovessi scrivere questo in Java, e un valore di 5 sono stati passati al metodo di cui sopra, sarebbe leggere la dichiarazione fino a quando non ha colpito "quando 5" o in termini java "caso 5:". Si noterà che non c'è un'interruzione nell'istruzione e si sposterà in basso nell'elenco che esegue il codice in "caso 4:" e si ripeterà fino a quando non verrà trovata un'interruzione. Se è stato passato 0, tuttavia, eseguirà il codice, vedrà l'interruzione e non eseguirà e altre istruzioni.
Mi chiedo se Ruby sia in grado di utilizzare le istruzioni case come fa java nel modo in cui passano alla prossima istruzione. Per il mio particolare problema sono consapevole che posso usare un ciclo 0.upto (errato) e gestire i casi in questo modo, ma mi piacerebbe conoscere le somiglianze e le differenze nella dichiarazione del caso usata in ruby rispetto al caso switch utilizzato in java
Il termine che stai cercando è "fall through", come in "questo caso passa al caso successivo". – Kenster