[英]Why do I get a nil after changing the order of two lines?
在titleize
方法中,當我反轉包含words.first.capitalize
和words.join(" ")
的行的順序時,為什么沒有nil?
def titleize(x)
words = x.split(" ").collect do |word|
if %w(the and over).include?(word)
word
else
word.capitalize
end
end
words.first.capitalize!
words.join(" ")
end
當我反轉words.first.capitalize和words.join(“”)行的順序時,為什么沒有nil?
這是原因:
"abb".capitalize # => "Abb"
"Abb".capitalize! # => nil
"Abb".capitalize # => "Abb"
通過將第一個字符轉換為大寫字母並將其余字符轉換為小寫字母來修改str。 如果未進行任何更改,則返回nil 。 注意:大小寫轉換僅在ASCII區域有效。
當您放置words.first.capitalize!
在方法末尾, String.capitalize!
試圖大寫已經大寫的單詞。 您正在使用bang(!)
版本,因此,根據文檔,您會得到nil
。
一個例子:
def titleize(x)
words = x.split(" ").collect do |word|
if %w(the and of).include?(word)
word
else
word.capitalize
end
end
words.join(" ")
words.first.capitalize!
end
titleize("he great book") # => nil
測試時,您的輸入字符串可能不包含您在%w(the and of)
此處列出的任何單詞。 我建議您改用String#capitalize
。
字符串類上用於修改字符串的方法,例如capitalize!
(和gsub!
, delete!
等),僅在對其進行更改后才返回該字符串。 如果未進行任何修改,則它們返回nil
:
irb(main):007:0> "the".capitalize!
=> "The"
irb(main):008:0> "The".capitalize!
=> nil
很有可能您的字符串已經大寫(除非它以“ the”,“ and”或“ over”開頭),所以當您capitalize!
最后調用,都capitalize!
並且您的方法返回nil
因為未修改字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.