2016-06-13 67 views
0

我的第一個代碼如下所示:爲什麼一個方法返回一個數組而另一個沒有?

def title(name) 
    string = [] 
    name.split.each do |word| 
    string << word.capitalize 
    end 
    string.join(' ') 
end 

print title('bob doe') 

這將返回:

Bob Doe 

我的第二個代碼如下:

class Book 
    def title 
    @title 
    end 

    def title=(book_name) 
    @title = [] 
    book_name.split.each do |word| 
     @title << word.capitalize 
    end 
    @title.join(' ') 
    end 
end 

RSpec的鍛鍊我的工作是問我可以利用它賦予我的任何標題。在這種情況下,我們說,他們希望

expect(@book.title).to eq("Inferno") 

我想我的問題是,如何來第二代碼返回[「地獄」當第一個代碼沒有返回數組的結果嗎?

我還是很新的編程,所以謝謝你的任何解釋!

回答

0

title=確實返回加入的字符串,就像title一樣。但是您沒有使用title=的返回值,您正在使用分配給@title的值。 @title.join('')返回加入的字符串,但它不會將已加入的字符串分配給@title。當title=退出時,@title仍然是您使用each構建的陣列。

修復這樣的:

class Book 
    def title 
    @title 
    end 

    def title=(book_name) 
    @title = [] 
    book_name.split.each do |word| 
     @title << word.capitalize 
    end 
    @title = @title.join(' ') 
    end 
end 

注意the return value of an assignment method normally doesn't matter,雖然它很有道理返回分配的值,作爲固定的方法一樣。

還要注意的是經驗豐富的Ruby開發者通常會寫這些方法更簡潔:

class Book 
    attr_reader :title 

    def title=(book_name) 
    @title = book_name.split.map(&:capitalize).join(' ') 
    end 
end 

想必你下最終會得到解決,以紅寶石的特點教程中的這些方法的版本使用。

相關問題