Ruby noob获取NoMethodError

时间:2014-11-14 05:22:10

标签: ruby nomethoderror

我正在做一个关于练习的Ruby练习 - 这是我第一次执行codecademy。并且设置是我在同一个文件夹中有两个文件 - hamming_test.rb,其中require_relative hamming.rb--我得到了那么远,但没有更远。我在hamming.rb中使用空方法设置了一个空类,但是当hamming_test.rb运行并进入第一个方法调用时,它会返回该行的NoMethodError。我怀疑代码是可以的(就目前而言),但问题出在我的计算机设置中。我试过从TextEdit和控制台以及NetBeans中运行它:同样的错误。我已经尝试了各种各样的事情,但总是出现同样的错误 - 就像解释器可以找到文件一样,但却无法看到它内部。我有一台运行Yosemite的Mac,而Ruby看起来运行正常。我甚至似乎无法走出大门,请帮忙。以下代码,如果有帮助:

hamming.rb:

class Hamming
  def compute
  end
end

hamming_test.rb:

require 'minitest/autorun'
begin
  require_relative 'hamming'
rescue LoadError => e
  puts "\n\n#{e.backtrace.first} #{e.message}"
  puts DATA.read
  exit 1
end

class HammingTest < MiniTest::Unit::TestCase
  def test_no_difference_between_identical_strands
    assert_equal 0, Hamming.compute('A', 'A')
  end

  def test_complete_hamming_distance_of_for_single_nucleotide_strand
    skip
    assert_equal 1, Hamming.compute('A','G')
  end

  def test_complete_hamming_distance_of_for_small_strand
    skip
    assert_equal 2, Hamming.compute('AG','CT')
  end

  def test_small_hamming_distance
    skip
    assert_equal 1, Hamming.compute('AT','CT')
  end

  def test_small_hamming_distance_in_longer_strand
    skip
    assert_equal 1, Hamming.compute('GGACG', 'GGTCG')
  end

  def test_ignores_extra_length_on_first_strand_when_longer
    skip
    assert_equal 1, Hamming.compute('AGAGACTTA', 'AAA')
  end

  def test_ignores_extra_length_on_other_strand_when_longer
    skip
    assert_equal 2, Hamming.compute('AGG', 'AAAACTGACCCACCCCAGG')
  end

  def test_large_hamming_distance
    skip
    assert_equal 4, Hamming.compute('GATACA', 'GCATAA')
  end

  def test_hamming_distance_in_very_long_strand
    skip
    assert_equal 9, Hamming.compute('GGACGGATTCTG', 'AGGACGGATTCT')
  end
end

END


你遇到了错误,这应该是应该的。 这是测试驱动开发的第一步 (TDD)过程。

错误最重要的部分是

  cannot load such file

它正在寻找一个名为bob.rb的文件 还存在。

要修复错误,请创建一个名为bob.rb的空文件 在与bob_test.rb文件相同的目录中。

然后再次运行测试。

有关本练习的更多指导,请参阅 GETTING_STARTED.md。


1 个答案:

答案 0 :(得分:0)

您正在调用类方法Hamming.compute('A', 'A')。这种方法没有定义。

  1. 您定义的compute方法是一种实例方法(您需要执行Hamming.new.compute)。
  2. 它被定义为零参数函数。
  3. 这个定义应解决这两个问题:

    class Hamming
      def self.compute(x, y)
      end
    end