Ruby Koans Quest 203(about_classes) - 使用rake

时间:2015-09-19 09:44:36

标签: ruby

当我填写预期输出并调用rake时遇到问题。我的设置或代码有问题吗?

  

josephs-MacBook-Air:koans jj $ rake   /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby   path_to_enlightenment.rb   AboutClasses#test_inside_a_method_self_refers_to_the_containing_object   已经损害了你的业力。

     

师父说:你尚未达到启蒙。我感觉到   挫折。不要害怕寻求帮助。

     

你寻求的答案......期待"填写我的"等于

     

请冥想以下代码:
  /Users/jj/Downloads/koans/about_classes.rb:162:in   `test_inside_a_method_self_refers_to_the_containing_object'

     

请记住,到目前为止,沉默有时是最好的答案   [................................... X______________] 203/282

有问题的代码是:

class Dog7
    attr_reader :name

    def initialize(initial_name)
      @name = initial_name
    end

    def get_self
      self
    end

    def to_s
      @name
    end

    def inspect
      "<Dog named '#{name}'>"
    end
  end

  def test_inside_a_method_self_refers_to_the_containing_object
    fido = Dog7.new("Fido")

    fidos_self = fido.get_self
    assert_equal __, fidos_self
  end

我把assest_equal填充到

def test_inside_a_method_self_refers_to_the_containing_object
        fido = Dog7.new("Fido")

        fidos_self = fido.get_self
        assert_equal <Dog named 'Fido'>, fidos_self
      end

爆炸。

  

/Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:54:in   require': /Users/jtacuyan/Downloads/koans/about_classes.rb:162: syntax error, unexpected tIDENTIFIER, expecting keyword_do or '{' or '(' (SyntaxError) assert_equal <Dog named 'Fido'>, fidos_self ^ /Users/jj/Downloads/koans/about_classes.rb:162: syntax error, unexpected ',' assert_equal <Dog named 'Fido'>, fidos_self ^ from /Library/Ruby/Site/2.0.0/rubygems/core_ext/kernel_require.rb:54:in 需要&#39;来自path_to_enlightenment.rb:28:在<main>' rake aborted! Command failed with status (1): [/System/Library/Frameworks/Ruby.framework/...] /Users/jj/Downloads/koans/Rakefile:10:in块中&#39;   任务:TOP =&gt;默认=&gt; test(通过运行任务查看完整跟踪   --trace)

我可以在irb上执行它。

irb(main):016:0> fido = Dog7.new("Fido")
=> <Dog named 'Fido'>
irb(main):017:0> fido
=> <Dog named 'Fido'>
irb(main):018:0> fido.name
=> "Fido"
irb(main):019:0> fido.get_self
=> <Dog named 'Fido'>
irb(main):020:0> fidos_self = fido.get_self
=> <Dog named 'Fido'>
irb(main):021:0> fidos_self
=> <Dog named 'Fido'>

2 个答案:

答案 0 :(得分:1)

你忘记了“在断言代码中。”

assert_equal "<Dog named 'Fido'>", fidos_self

<强>已更新

你应断言fidos_self指的是自己,即实例化的Dog7fido

assert_equal fido, fidos_self

这正是这个测试应该做的。

答案 1 :(得分:0)

该错误是类型对象错误;第一个元素是字符串类型,第二个元素是Dog7类型。解决方案是适当地匹配类型。

检查以下项的返回值:

fidos_self.is_a?(String)
fidos_self.is_a?(Dog7)
fidos.is_a?(Dog7)
fidos_self
fidos