首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ruby的case声明会失败吗?

ruby的case声明会失败吗?
EN

Stack Overflow用户
提问于 2015-07-16 09:25:02
回答 2查看 11.1K关注 0票数 21

我正在用ruby编写一个绞刑者游戏,我想使用一个case语句来确定与一些错误的猜测相对应的身体部位。我使用一个棋盘类制作了这个游戏,这个棋盘类用于国际象棋和connect-4等其他游戏,因为我有一个序列化棋盘类的方法,允许我在不需要任何额外代码的情况下保存和加载游戏。为了保存游戏,我需要一些方法来确定绞刑者的错误猜测的数量,而不需要向棋盘类添加额外的变量。为了解决这个问题,我在棋盘类上使用了一个名为history的实例变量,它可以用来将游戏中的移动推送到棋盘历史记录中。当棋盘被序列化时,历史记录也会被保存,游戏可以读取这些历史记录,并使用它来确定不正确的猜测。

在hangman游戏中,我有一个名为read history的方法(我对所有游戏都使用它,因为它解决了上面描述的序列化问题)。read_history方法负责读取过去的猜测,显示它们,并确定错误猜测的数量。然后将这个数字传递给一个挂起方法,该方法确定要添加绞刑者的哪些身体部位。

代码语言:javascript
复制
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传递给上面的方法,它将读取该语句,直到命中"when 5“或java术语中的"case 5:”。它会注意到语句中没有中断,并将在列表中向下移动,执行"case 4:“中的代码,并重复执行,直到找到中断。如果传递了0,则它将执行代码,请参见break,并且不会执行和其他语句。

我想知道Ruby是否能够像java那样使用case语句,就像它们落入下一条语句那样。对于我的特定问题,我知道我可以使用0.upto(不正确)循环并以这种方式运行case,但我想知道ruby中使用的case语句与java中使用的switch-case语句的异同。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-16 10:04:56

它不会失败。

Ruby just doesn't have the same behavior as Java for this type of statement.

如果要模拟坠落行为,可以执行以下操作:

代码语言:javascript
复制
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
票数 13
EN

Stack Overflow用户

发布于 2015-07-16 10:06:44

不,Ruby的case语句不会像Java那样失败。实际上只有一个部分在运行(或者运行其他部分)。但是,您可以在单个匹配中列出多个值,例如this site shows

代码语言:javascript
复制
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

它在功能上等同于一个巨大的if-else。代码学院的page on it建议使用逗号来提供多个选项。但是你仍然不能执行一个以上的逻辑分支。

票数 62
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31443922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档