【问题标题】:A Ruby class to compare the characters in two strings用于比较两个字符串中的字符的 Ruby 类
【发布时间】:2016-02-07 08:35:57
【问题描述】:

我正在尝试完成一个 exercism.io 测试文件,该文件比较两个字符串并在每次两个字符串之间存在差异时将一个添加到计数器中。我已经编写了我的课程,但由于某种原因它不会在终端中运行。我已经将我的代码与几个在线语法示例进行了比较,但不明白为什么它不会运行。任何帮助将不胜感激。

这是我的课:

class Hamming
    def compute(str1, str2)
        distance = 0
        length = str1.length
        for i in 0..length
            if str1[i] != str2[i] then
                distance++
            end
        end
    return distance
    end
end

这是一个相关的测试文件:

class HammingTest < Minitest::Test
  def test_identical_strands
    assert_equal 0, Hamming.compute('A', 'A')
  end
end

最后,这是我得到的错误:

hamming_test.rb:4:in `require_relative': /Users/Jack/exercism/ruby/hamming/hamming.rb:8: syntax error, unexpected keyword_end (SyntaxError)
/Users/Jack/exercism/ruby/hamming/hamming.rb:12: syntax error, unexpected end-of-input, expecting keyword_end
    from hamming_test.rb:4:in `<main>'

【问题讨论】:

  • 试过了。没有骰子!

标签: ruby string function class compare


【解决方案1】:
  1. if 语句中的条件后不需要then
  2. 在 Ruby 中使用两个空格而不是四个空格进行缩进。
  3. (错误的直接原因)Ruby 中没有 ++ 运算符。你应该有

    distance += 1
    

【讨论】:

  • 当在列表中时,你缩进的代码是 8 个空格,而不是 4 个 :)
  • 解决了!谢谢你,我觉得很傻。如果只是错误消息不是那么该死的神秘!
  • @Jac7k:您的代码仍将失败,并显示“NoMethodError: undefined method ‘compute’ for Hamming:Class”。这个更容易弄清楚。
  • @Jac7k 在我看来,Ruby 中的唯一语法错误在 Ruby 中有点“神秘”。运行时错误更加不言自明。
  • @SergioTulentsev 定义应该是“self.compute”而不是“compute”。通过将它与我之前的测试作业进行比较来抓住它。谢谢大家!
猜你喜欢
  • 2020-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 2012-08-02
  • 1970-01-01
  • 2012-04-07
相关资源
最近更新 更多