ruby的案例陈述是否会落空?

时间:2015-07-16 01:25:02

标签: ruby

我正在ruby中编写一个刽子手游戏,我想使用一个case语句来确定哪个正文部分对应于一些不正确的猜测。我使用我用于其他游戏(如国际象棋和connect-4)的棋盘类制作了这个游戏,因为我有一个序列化棋盘类的方法,允许我保存并加载游戏而无需任何额外的代码。对于要保存的游戏,我需要一些方法来确定刽子手的错误猜测次数而不向板类添加额外的变量。为了解决这个问题,我在名为history的棋盘类上使用了一个实例变量,它可以用来推动从游戏到棋盘历史的移动。当棋盘被序列化时,历史也被保存,游戏可以读取并用于确定错误的猜测。

在刽子手游戏中,我有一个叫做阅读历史的方法(我用它来解决上面描述的序列化问题所有游戏)。 read_history方法负责读取过去的猜测,显示它们,并确定错误猜测的数量。然后将此数字传递给hang方法,该方法确定要添加的hangman的哪些正文部分。

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

如果我在java中写这个,并且将值5传递给上面的方法,它将读取该语句,直到它达到"当5"或者用Java术语"案例5:"。它会注意到语句中没有中断,并且会在执行代码的列表中向下移动"案例4:"并重复直到找到休息时间。如果0被传递,那么它将执行代码,查看中断,并且不会执行和其他语句。

我想知道Ruby是否能够像java那样通过下一个语句的方式使用case语句。对于我的特定问题,我知道我可以使用0.upto(不正确)循环并以这种方式运行案例,但我想知道ruby中使用的case语句的相似点和不同点,而不是switch-case在java中使用

1 个答案:

答案 0 :(得分:44)

不,Ruby的案例陈述不像Java那样落空。实际上只运行一个部分(或其他部分)。但是,您可以在一次匹配中列出多个值,例如比如this site shows

SPRING_PROFILES_ACTIVE=local gradle bootRun

它在功能上等同于一个巨大的if-else。 Code Academy的page on it建议使用逗号提供多种选项。但是你仍然无法执行多个逻辑分支。