Ruby 通过rspec的故障

Ruby 通过rspec的故障,ruby,rspec,Ruby,Rspec,我正在努力通过这次考试 describe "title" do it "should capitalize the first letter" do @book.title = "inferno" expect(@book.title).to eq("Inferno") end it "should capitalize every word" do @book.title = "stuart little" expect(@book.title).to eq("Stuart

我正在努力通过这次考试

describe "title" do
it "should capitalize the first letter" do
  @book.title = "inferno"
  expect(@book.title).to eq("Inferno")
end

it "should capitalize every word" do
  @book.title = "stuart little"
  expect(@book.title).to eq("Stuart Little")
end
使用此代码

class Book
  attr_accessor :title

  def initialize(title="")
    @title = capital(title)
  end

  def capital(title)
    articles = %w(the a an and of in the)
    new_title = []

    title.split.each do |w|
      articles.include?(w)? new_title << w : new_title << w.capitalize
      end

    new_title[0] = new_title[0].capitalize
    new_title.join(" ")
  end

end

book = Book.new("stuart little")
puts book.title
教材
属性存取器:标题
def初始化(title=”“)
@标题=资本(标题)
结束
def资本(标题)
文章=%w(中的a和的)
新标题=[]
title.split.each do|w|

文章。包括?(w)?new_title当您将标题分配给
new
方法时,您只运行
capital
方法,而当您将标题分配给
title=
setter方法时,则不运行该方法

我将用
attr\u读取器
替换
attr\u访问器
,并添加一个自定义
title=
setter方法:

class Book
  attr_reader :title

  def initialize(title = '')
    self.title = title # calls the setter below
  end

  def title=(title)
    @title = capital(title)
  end

private

  def capital(string)
    articles = %w( a an and in of the )

    words = title.split.map do |word|
      articles.include?(word) ? word : w.capitalize
    end

    words.join(' ').capitalize
  end
end

对不起,我的所有问题,但是为什么attr_访问器对于需要title=setter方法的setter来说还不够?(感谢您的回答!)@Stephanie:
attr\u accessor
生成一个简单的setter,如
@title=title
。如果使用该方法,它不会调用
capital
方法,它只会分配字符串,而不会在之前将其大写。但是如果您使用我的答案中的自定义
title=
方法,它将分配更改字符串:
@title=capital(title)
。这就更有意义了!非常感谢。我很高兴能帮上忙