現在、rspec ruby チュートリアルを行っています。問題の 1 つは、英語の大文字化規則のいくつかを利用する book_title プログラムを作成することを要求します。テストは非常に長いですが、何を求めているかについていくつかのアイデアを提供するために、最初の最後のテストを以下に含めました。
require 'book'
describe Book do
before do
@book = Book.new
end
describe 'title' do
it 'should capitalize the first letter' do
@book.title = "inferno"
@book.title.should == "Inferno"
end
specify 'the first word' do
@book.title = "the man in the iron mask"
@book.title.should == "The Man in the Iron Mask"
end
end
end
end
私のコードは次のとおりです。
class Book
attr_accessor :title
def initialize(title = nil)
@title = title
end
def title=(book_title = nil)
stop_words = ["and", "in", "the", "of", "a", "an"]
@title = book_title.split(" ").each{ |word|
unless stop_words.include?(word)
word.capitalize!
end}.join(" ").capitalize
end
end
私が抱えているこの問題は、def title=
メソッドにあります。@title = book_title.split
(...など) すべて 1 行にまとめました。分割しようとすると、以前のテストの多くが失敗するためです。
私が試したコードの例:
@title = book_title.split(" ").each do |word| # attempting to add words to an array
unless stop_words.include?(word) # to capitalize each word
word.capitalize!
end
end
@title.join(" ") # Joining words into one string
@title.capitalize # Capitalizing title's first word
end # to follow the last test
これを試すと、テストは失敗します (@title#join と @title#capitalize を試すときに、@title を再度呼び出す必要があると考えています)。
他のいくつかの考え: 最初の部分 (word.capitalize! end end
別の変数 (おそらく book_title または new_title) で終わる最も長い行) を設定することだけを考えていましたが、@title を初期化または使用する理由がそもそも何なのか疑問に思っていました。
よりクリーンなコードの編集だけでなく、入力も大歓迎です