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

Jar*_*hey 18 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
Run Code Online (Sandbox Code Playgroud)

如果我在java中编写它,并将值5传递给上面的方法,它将读取语句,直到它达到"when 5"或java术语"case 5:".它会注意到语句中没有中断,并且会在执行"case 4:"中的代码的列表中向下移动并重复直到找到中断.如果0被传递,那么它将执行代码,查看中断,并且不会执行和其他语句.

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

Mar*_*tin 50

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

print "Enter your grade: "
grade = gets.chomp
case grade
when "A", "B"
  puts 'You pretty smart!'
when "C", "D"
  puts 'You pretty dumb!!'
else
  puts "You can't even use a computer!"
end
Run Code Online (Sandbox Code Playgroud)

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

  • 不确定为什么*这*不是公认的答案.: - / (8认同)
  • 这不是公认的答案,因为它不适用于 OP 用例。还是不错的资料 (2认同)

mse*_*ant 10

它没有落空.

对于这种类型的语句,Ruby与Java没有相同的行为.

如果要模拟跌倒行为,可以执行以下操作:

def hang(incorrect)
    @hangman = ["   ", "   ", "   "]
    @hangman[2][2] = '\\' if incorrect > 6
    @hangman[2][0] = '/' if incorrect > 5
    @hangman[2][1] = '*' if incorrect > 4
    @hangman[1][2] = '\\' if incorrect > 3
    @hangman[1][0] = '/' if incorrect > 2
    @hangman[1][1] = '|' if incorrect > 1
    @hangman[0][1] = 'o' if incorrect > 0

    @hangman
  end
Run Code Online (Sandbox Code Playgroud)