我在遗留代码中发现了以下内容:
"myString".sub(/^(.)/) {$1.upcase}
似乎很奇怪。在IRB中执行时,我得到与"myString".capitalize
无法找到文档......所以最终在SO
答案 0 :(得分:3)
不完全是,
"myString".capitalize
#=> "Mystring"
"myString".sub(/^(.)/) {$1.upcase}
#=> "MyString"
来自capitalize
的{{3}}
返回str的副本,第一个字符转换为大写,余数为小写。注意:大小写转换仅在ASCII区域有效。
答案 1 :(得分:1)
sub
接受可选块而不是替换参数。如果给定,它将子匹配放入全局变量,调用块,并返回字符串的匹配部分和块的返回值。
有问题的正则表达式在行的开头找到第一个字符。它将该字符放在$1
中,因为它包含在子匹配()
中,调用该块,返回$1.upcase
。
顺便说一句,这是一种大脑死亡的方式来利用字符串。即使您不知道.capitalize
或此代码来自 {/ 1}}之前的(?),您仍然可以完成.capitalize
。唯一可能的好处是,如果字符串为空,myString[0] = myString[0].upcase
方法将起作用,.sub
将引发异常。尽管如此,绕过 问题的更好方法是""[0].upcase
答案 2 :(得分:0)