2011-11-22 68 views
14

我工作了下面的Ruby公案:Ruby Koans:這個返回值中的引號在哪裏?

class Dog7 
    attr_reader :name 

    def initialize(initial_name) 
    @name = initial_name 
    end 

    def get_self 
    self 
    end 

    def to_s 
    __ 
    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 "<Dog named 'Fido'>", fidos_self 
end 

def test_to_s_provides_a_string_version_of_the_object 
    fido = Dog7.new("Fido") 
    assert_equal __, fido.to_s 
end 

第一assert_equal的前半部分是什麼,我想填補這個代碼提供了錯誤:

<"<Dog named 'Fido'>"> expected but was <<Dog named 'Fido'>>. 

問題是,我堅持如何匹配返回值。它看起來像一個字符串文字返回值,但我不知道如何表達,不使用引號和/或反斜槓。沒有我嘗試似乎工作。

幫助?

+1

什麼是方法'__'? –

+0

這是一個填充空白的教程。這個想法是以測試失敗爲準,然後填寫所需的代碼讓它通過。我添加了第一個斷言的「<狗命名'Fido'>」部分。 – nrflaw

回答

1

更改test_inside_a_method_self_refers_to_the_containing_object到以下工作:

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.inspect # .inspect added. 
end 


好吧,有沒有更多的差距,以填補?我有一個答案,但似乎你已經錯誤地填補了一個空白。

+0

謝謝!這確實有效。雖然這裏有一個單獨的測試:'def test_inspect_provides_a_more_complete_string_version fido = Dog7.new(「Fido」) assert_equal <狗名爲'Fido'>「,fido.inspect end' – nrflaw

24

在盯着它一會兒之後,我又想出了他們要帶課的地方。將第一個斷言改爲「assert_equal fido,fidos_self」使測試通過。沒有給出與檢查方法相同的輸出的錯誤,我沒有引用。感謝您幫助我解決問題。

+0

感謝您的幫助。這個公牛不是最好的。問題是什麼?我想不出比你的建議更好的選擇(我沒有想到這一點)。 – codenoob

相關問題