所以很明顯這個問題之前已經被問過了,但是我真正要求的是特定於我寫的代碼。基本上我正在大寫字(標題)。我的方法沒有優化,而且它確實進入了圈子,所以只是忍耐。一旦我再次降低標題,我似乎無法重新評估標題的第一個字。我已經在代碼中寫下了評論,所以你可以在不分析整個事物的情況下輕鬆通過它。我不要求你寫一個新的代碼,因爲我可以只是谷歌。我更感興趣的是,爲什麼我的解決方案不工作..重新大寫第一個單詞
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