我在遗留代码中发现了以下内容:
"myString".sub(/^(.)/) {$1.upcase}看起来很奇怪。在IRB中执行时,我得到了与"myString".capitalize相同的结果
找不到文件..。所以就这样
发布于 2013-09-24 02:48:32
不完全同意,
"myString".capitalize
#=> "Mystring"
"myString".sub(/^(.)/) {$1.upcase}
#=> "MyString"来自文档 for capitalize
返回str的副本,其中第一个字符转换为大写,其余字符转换为小写。注:案例转换仅在ASCII区域有效。
发布于 2013-09-24 02:44:13
sub接受一个可选块,而不是替换参数。如果给定,则将子匹配放置到全局变量中,调用块,并使用块的返回值返回字符串的匹配部分。
该正则表达式在一行开头找到第一个字符。它将该字符放置在$1中,因为它包含在子匹配()中,调用块,该块返回$1.upcase。
顺便说一句,这是一种将字符串大写成大写字母的脑死亡方式。即使您不知道.capitalize,或者这段代码是在.capitalize可用之前编写的(?),您仍然可以简单地执行myString[0] = myString[0].upcase。唯一可能的好处是,如果字符串为空,则.sub方法将工作,其中""[0].upcase将引发异常。不过,规避这个问题的更好的方法是myString[0] = myString[0].upcase if myString.length > 0。
发布于 2013-09-24 02:46:56
两者并不完全相同。sub用于替换指定模式的第一次出现,而gsub则对所有事件(即全局替换)进行替换。
在您的问题中,正则表达式是第一个字符,即$1,并替换为$1.upcase。
代码:
"myString".sub(/^(.)/) {$1.upcase}输出:
"MyString"代码:
"myString".capitalize输出:
"Mystring"https://stackoverflow.com/questions/18972089
复制相似问题