2013-10-19 59 views
0

我目前正在通過一組TestFirst問題。我正在處理的問題的規範可以在這裏找到:http://testfirst.org/live/learn_ruby/book_titles問題正確格式化紅寶石通過rspec

我已經測試了類之外的標題方法,所以我知道它的工作原理,但是一旦我將它放在類中,我會得到以下錯誤:

1) Book title should capitalize the first letter 
    Failure/Error: @book.title.should == "Inferno" 
    ArgumentError: 
     wrong number of arguments (0 for 1) 

這是我到目前爲止有:

class Book 
    attr_accessor :title 

    def initialize(title=nil) 
    @title = title 
    end 

    def title(title) 
    first_check = 0 
    articles = %w{a the an in and of} 
    words = title.split(" ") 

    words.each do |word| 

     if first_check == 0 
     word.capitalize! 
     first_check += 1 
     elsif !articles.include?(word) 
     word.capitalize! 
     end 

    end 
    @title = words.join(" ") 
    end 

end 

如果有人能解釋類應該如何格式化,它會不勝感激!

回答

1

你的問題就在這裏:

def title(title) 

Book#title方法需要一個參數,但你不能在你的天賦給它一個:

@book.title.should == "Inferno" 
# ----^^^^^ this method call needs an argument 

我想到你居然想Book#title=方法:

def title=(title) 
    # The same method body as you already have 
end 

然後您將使用title訪問器方法attr_accessor :title提供並分配新標題將使用您的title=方法。而且,由於您提供了自己的增變器方法,因此可以使用attr_reader代替:

class Book 
    attr_reader :title 

    def initialize(title=nil) 
    @title = title 
    end 

    def title=(title) 
    #... 
    end 
end 
+0

這絕對有效......現在我明白了什麼是setter方法。謝謝! –