我目前正在做一个 rspec ruby 教程。其中一个问题需要我编写一个 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
(...等)都在一行中,因为当我尝试将其拆分时,我以前的许多测试都失败了。
我尝试过的一些代码示例:
@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 的原因是什么。
任何输入,以及更简洁的代码编辑,将不胜感激