Ich schreibe ein Hangman-Spiel in Ruby und ich wollte eine case-Anweisung verwenden, um zu bestimmen, welcher Körperteil entsprechend einer Anzahl von falschen Schätzungen platziert werden soll. Ich habe dieses Spiel mit einer Board-Klasse gemacht, die ich für andere Spiele wie Schach und Connect-4 verwende, weil ich eine Methode habe, die die Board-Klasse serialisiert, sodass ich das Spiel ohne zusätzlichen Code speichern und laden kann. Um das Spiel zu speichern, brauchte ich einen Weg, um die Anzahl der falschen Schätzungen für den Henker zu bestimmen, ohne zusätzliche Variablen in die Board-Klasse aufzunehmen. Um dies zu lösen, habe ich eine Instanzvariable in der Board-Klasse namens history verwendet, die verwendet werden kann, um Züge aus dem Spiel in den Boards-Verlauf zu schieben. Wenn das Board serialisiert wird, wird auch der Verlauf gespeichert, der vom Spiel gelesen und verwendet werden kann, um falsche Annahmen zu bestimmen.Fällt die Case-Anweisung von Ruby durch?
Im Hangman-Spiel habe ich eine Methode namens read history (die ich für alle Spiele benutze, da sie das oben beschriebene Serialisierungsproblem löst). Die read_history-Methode ist dafür verantwortlich, die vergangenen Annahmen zu lesen, sie anzuzeigen und die Anzahl der falschen Annahmen zu bestimmen. Diese Nummer wird dann an eine Hang-Methode übergeben, die festlegt, welche Körperteile des Hangman hinzugefügt werden sollen.
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
Wenn ich das in Java, und ein Wert von 5 wurde das obige Verfahren bestanden schreibe, würde es die Erklärung lesen, bis es „wenn 5“ oder in Java-Bedingungen Hit „5 Falles:“. Es würde bemerken, dass es keine Unterbrechung in der Anweisung gibt, und wird die Liste, die den Code ausführt, in "Fall 4:" nach unten bewegen und wiederholen, bis eine Pause gefunden wird. Wenn 0 übergeben würde, würde es jedoch den Code ausführen, den Break sehen und würde keine anderen Anweisungen ausführen.
Ich frage mich, ob Ruby in der Lage ist, Fallanweisungen so zu verwenden, wie Java es tut, wenn sie zur nächsten Anweisung durchgehen. Für mein spezielles Problem ist mir bewusst, dass ich eine 0.upto (inkorrekte) Schleife verwenden und die Fälle auf diese Weise ausführen kann, aber ich würde gern die Ähnlichkeiten und Unterschiede in der in ruby verwendeten Fallanweisung im Gegensatz zum switch-case kennen verwendet in Java
Der Begriff, den Sie suchen, ist "durchfallen", wie in "Fall fällt durch den nächsten Fall". – Kenster