为什么一个方法返回一个数组而另一个没有?

时间:2016-06-13 10:12:32

标签: ruby rspec

我的第一段代码如下:

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")

我想我的问题是,当第一个代码返回没有数组的结果时,第二个代码如何返回[“Inferno”]?

我还是很喜欢编程,所以谢谢你的任何解释!

1 个答案:

答案 0 :(得分: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,尽管返回指定值最有意义,就像固定方法一样。

另请注意,经验丰富的Rubyists通常会更简洁地编写这些方法:

class Book
  attr_reader :title

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

据推测,您所遵循的教程最终将涉及这些方法的那些版本中使用的Ruby功能。