私はレガシーコードで次のことを見つけました:
"myString".sub(/^(.)/) {$1.upcase}
非常に奇妙に思えます。IRBで実行している間、私は同じ結果を得ました"myString".capitalize
ドキュメントを見つけることができませんでした...だから最終的にSOになりました
私はレガシーコードで次のことを見つけました:
"myString".sub(/^(.)/) {$1.upcase}
非常に奇妙に思えます。IRBで実行している間、私は同じ結果を得ました"myString".capitalize
ドキュメントを見つけることができませんでした...だから最終的にSOになりました
ではない正確に、
"myString".capitalize
#=> "Mystring"
"myString".sub(/^(.)/) {$1.upcase}
#=> "MyString"
のドキュメントから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