我在遺留代碼中發現以下內容:
"myString".sub(/^(.)/) {$1.upcase}
看起來很奇怪。而在IRB執行,我得到了相同的結果"myString".capitalize
無法找到文件......就這麼結束了對SO
我在遺留代碼中發現以下內容:
"myString".sub(/^(.)/) {$1.upcase}
看起來很奇怪。而在IRB執行,我得到了相同的結果"myString".capitalize
無法找到文件......就這麼結束了對SO
不完全是,
"myString".capitalize
#=> "Mystring"
"myString".sub(/^(.)/) {$1.upcase}
#=> "MyString"
從docs爲capitalize
返回STR的副本與第一字符轉換爲大寫,其餘爲小寫。注意:大小寫轉換僅在ASCII區域有效。
sub
接受可選塊,而不是替代參數。如果給定,它將子匹配放置到全局變量中,調用該塊,並返回字符串的匹配部分和塊的返回值。
正在討論的正則表達式在行的開頭找到第一個字符。它將該字符放置在$1
中,因爲它包含在子匹配()
中,調用該塊,該塊返回$1.upcase
。
順便說一下,這是一個大腦死亡的字符串大寫方法。即使您不知道.capitalize
或此代碼是從之前.capitalize
可用(?),您仍然可以簡單地完成myString[0] = myString[0].upcase
。唯一可能的好處是.sub
方法將在字符串爲空時起作用,其中""[0].upcase
將引發異常。仍然,規避即問題的更好方法是myString[0] = myString[0].upcase if myString.length > 0
您的標題和問題不匹配。你對'gsub'或'sub'感興趣嗎?他們不是一回事。 – meagar