我的第一段代码如下:
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”]?
我还是很喜欢编程,所以谢谢你的任何解释!
答案 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功能。