1

我不是每天都在 Ruby 中工作,但我正在努力复习它。在 exercism.io 上,我正在尝试完成一个练习,但我想出的解决方案不起作用。这是测试代码:

class ResistorColorDuoTest < Minitest::Test
  def test_brown_and_black
    # skip
    assert_equal 10, ResistorColorDuo.value(["brown", "black"])
  end
end

这是我想出的解决方案:

module ResistorColorDuo
    def self.value(colors)
        case colors
        when (colors - ["brown", "black"]).empty?
            10
        else
            -1
        end
    end
end

该方法的输出为-1。我不知道我犯了什么错误。非常感谢任何建议。感谢您的阅读。

4

2 回答 2

4

你使用case它就像一个if.

(colors - ["brown", "black"]).empty?

评估为与您的true比较truecolors

切换到 if-else

def self.value(colors)
  if (colors - ["brown", "black"]).empty?
    10
  else
    -1
  end
end
于 2020-11-08T14:17:02.927 回答
2

基于:https ://stackoverflow.com/a/42269911/14454939

colors = ["brown", "black"]

case
when (colors - ["brown", "black"]).empty?
    10
else
    -1
end
# => 10

colors = ["brown", "blue"]

case
when (colors - ["brown", "black"]).empty?
    10
else
    -1
end
# => -1

编辑:直到现在我才真正想到它,但是有你不能这样做的理由吗?:

colors = ["brown", "blue"]

case colors
when ["brown", "black"]
    10
when ["brown", "blue"]
    20
else
    -1
end
# => 20

或者如果顺序无关紧要:

colors = ["brown", "blue"]

case colors.sort
when ["black", "brown"] #.sort if you don't want to sort manually
    10
when ["blue", "brown"]
    20
else
    -1
end
# => 20
于 2020-11-08T14:47:32.793 回答