我无法理解为什么word
没有大写或大写。
class Book
attr_accessor :title
def title=(changed_title)
changed_title.split(" ").map!{|word|
word.to_s.capitalize
}.join(" ")
@title = changed_title
end
end
book = Book.new
book.title = "check"
puts book.title
# >> check
答案 0 :(得分:8)
split(' ')
生成一个临时数组。 map!
改变了那个数组。然后它就消失了(因为它没有分配给任何东西)。
changed_title
仍处于原始状态("check"
),未发生变异。
这是一个修复:
class Book
attr_reader :title
def title=(changed_title)
@title = changed_title.split(" ").map(&:capitalize).join(" ")
end
end
book = Book.new
book.title = "check"
puts book.title
# >> Check
答案 1 :(得分:3)
或者做
def title=(changed_title)
@title = changed_title.gsub(/\w+/, &:capitalize)
end
正则表达式匹配所有单词(准确地说是一个或多个单词字符)。 gsub
用块的返回值替换所有出现的值,一次取一个匹配并将其大写。最后,该值将分配给@title
。
编辑 - 正如@SergioTulentsev所指出的,这会产生不同的结果,例如:最初在问题中使用的方法将产生:
"$hello"
→"$hello"
" foo bar "
→"Foo Bar"
然而,本答案中提出的方法将产生:
"$hello"
→"$Hello"
" foo bar "
→" Foo Bar "
答案 2 :(得分:2)
def title=(changed_title)
@title = changed_title.split.map(&:capitalize).join(' ')
end
或者如果你使用rails
# require if not rails app
#require 'rails'
# or to not require all rails as @p11y suggested
#require 'active_support/core_ext/string/inflections'
def title=(changed_title)
@title = changed_title.titleize
end
答案 3 :(得分:1)
a = "a big brown fox"
a = a.split.map(&:capitalize!).join(" ") #=> A Big Brown Fox