首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ruby字符串比较

Ruby字符串比较
EN

Stack Overflow用户
提问于 2012-10-09 22:34:45
回答 1查看 185关注 0票数 2

当我在CodeAcademy实验室中尝试使用rps_game_winner方法(如下所示)时,它可以很好地使用以下输入:

代码语言:javascript
运行
复制
> rps_game_winner([ ["Dave", "P"], ["Armando", "S"] ])
valid value: p
valid value: s
=> ["Armando", "S"]

> rps_game_winner([ ["Allen", "P"], ["Richard", "P"] ])[0]
valid value: p
valid value: p
=> "Allen"

当我提交给自动阅卷器的作业时,它总是失败,并返回一个NoSuchStrategyError

代码语言:javascript
运行
复制
Failure/Error: rps_game_winner([ ["Dave", "P"], ["Armando", "S"] ])[0].should eq("Armando"), "Incorrect Winner returned"
     NoSuchStrategyError:
       NoSuchStrategyError

有人能帮帮忙吗?谢谢。

代码语言:javascript
运行
复制
def rps_game_winner(game)
  raise WrongNumberOfPlayersError unless game.length == 2
  a1=[(game[0][1]).downcase]
  a2=[(game[1][1]).downcase]
  a3=a1.to_s
  a4=a2.to_s
  valid=["r","p","s"]

  if(valid.include?(a3))
    puts "valid value: "+a3
  else
    raise NoSuchStrategyError
  end

  if(valid.include?(a4))
    puts "valid value: "+a4
  else
    raise NoSuchStrategyError
  end

  if(win(a1, a2))
    return game[0]
  else
    if a1.eql?(a2)
      return game[0]
    else
      return game[1]
    end
  end

  return game[0] if a1.eql?(a2)
end
EN

回答 1

Stack Overflow用户

发布于 2012-10-09 23:07:57

首先,我不了解你的家庭作业的背景。但根据NoSuchStrategyError的说法,它当然击败了valid.include?(x)。

原因可能(我假设)是Ruby的不同版本(1.8 codeacademy Labs vs 1.9 autograder)。因为Array#to_s在1.8(加入)和1.9(检查)上的行为不同。

代码语言:javascript
运行
复制
a1=[(game[0][1]).downcase]
a2=[(game[1][1]).downcase]
a3=a1.to_s
a4=a2.to_s
valid=["r","p","s"]

在1.8版本中: a3将类似于"s“。

在1.9中: a3类似于"\"s\"“。

请查看此链接:Ruby 1.9 Array.to_s behaves differently?

要解决此问题,请执行以下操作:

代码语言:javascript
运行
复制
  a1=game[0][1].downcase
  a2=game[1][1].downcase

去掉a3和a4,只比较a1和a2在1.8和1.9上应该没问题。

除此之外,您还可以通过执行以下操作(与您的问题无关)来删除一些冗余:

代码语言:javascript
运行
复制
  [a1, a2].each do |x|
    if valid.include?(x)
      puts "valid value: #{x}"
    else
      raise NoSuchStrategyError
    end
  end
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12802406

复制
相关文章

相似问题

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