所以很明显这个问题之前已经被问过了,但是我真正要求的是特定于我写的代码。基本上我正在大写字(标题)。我的方法没有优化,而且它确实进入了圈子,所以只是忍耐。一旦我再次降低标题,我似乎无法重新评估标题的第一个字。我已经在代码中写下了评论,所以你可以在不分析整个事物的情况下轻松通过它。我不要求你写一个新的代码,因为我可以只是谷歌。我更感兴趣的是,为什么我的解决方案不工作..重新大写第一个单词
input: "the hamster and the mouse"
output: "the Hamster and the Mouse"
WHAT I WANT: "The Hamster and the Mouse"
class String
def titleize
#regex reads: either beginning of string or whitespace followed by alpha
self.gsub(/(\A|\s)[a-z]/) do |letter|
letter.upcase!
end
end
end
class Book
attr_accessor :title
def title=(title)
@title = title.titleize #makes every word capitalized
small_words = %w[In The And A An Of]
words = @title.split(" ")
#makes all the "small_words" uncapitalized again
words.each do |word|
if small_words.include?(word)
word.downcase!
end
end
words[0][0].upcase! #doesnt work
@title = words.join(" ")
#NEED TO MAKE FIRST WORD CAPITALIZED EVEN IF ITS A "small_word"
@title[0].upcase! #also doesnt work
end
末
words [0] [0]正在返回数组中第一个单词的第一个字母,但是是upcase!仅影响从单词[0] [0]返回的值 - 它不会更改单词[0]。尝试单词[0] [0] =单词[0] [0] .upcase。字[0] .upcase!会改变单词,但会改变单词[0] [0] .upcase!才不是。 – Joseph
我可以发誓我试过这个,但这种方法工作!我认为我之前做的是词[0] [0] =词[0] [0] .upcase !.我猜!是问题。我不需要打电话!如果我没有改变它的位置吗? – Jeff
使用这种方法,如果您使用!或不,但没有必要。因为您正在重新赋值(单词[0] [0]到单词[0] [0] .upcase)。单词[0]和单词[0] [0]之间的区别在于单词[0]引用了恰好是字符串的数组元素,因此可以用upcase!来更改。字[0] [0]引用一个字符串,但它不是单词中的数组元素。字[0]正在调用数组的索引,该数组返回一个字符串。字[0] [0]正在调用字符串的索引并返回一个与数组元素无关的新字符串。 – Joseph