我在遗留代码中发现以下内容:
"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
因为它包含在 sub-match 中()
,调用块,该块返回$1.upcase
。
顺便说一句,这是一种将字符串大写的脑死方法。即使你不知道.capitalize
或者这个代码是从以前 .capitalize
可用的(?),你仍然可以简单地完成myString[0] = myString[0].upcase
. 唯一可能的好处是,.sub
如果字符串为空,该方法将起作用,其中""[0].upcase
将引发异常。不过,绕过这个问题的更好方法是myString[0] = myString[0].upcase if myString.length > 0