首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gsub { $1.upcase }?是否等同于.capitalize?

gsub { $1.upcase }?是否等同于.capitalize?
EN

Stack Overflow用户
提问于 2013-09-24 02:38:27
回答 3查看 640关注 0票数 1

我在遗留代码中发现了以下内容:

"myString".sub(/^(.)/) {$1.upcase}看起来很奇怪。在IRB中执行时,我得到了与"myString".capitalize相同的结果

找不到文件..。所以就这样

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-24 02:48:32

不完全同意,

代码语言:javascript
复制
 "myString".capitalize
 #=> "Mystring"

 "myString".sub(/^(.)/) {$1.upcase}
 #=> "MyString"

来自文档 for capitalize

返回str的副本,其中第一个字符转换为大写,其余字符转换为小写。注:案例转换仅在ASCII区域有效。

票数 3
EN

Stack Overflow用户

发布于 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

票数 1
EN

Stack Overflow用户

发布于 2013-09-24 02:46:56

两者并不完全相同。sub用于替换指定模式的第一次出现,而gsub则对所有事件(即全局替换)进行替换。

在您的问题中,正则表达式是第一个字符,即$1,并替换为$1.upcase

代码:

代码语言:javascript
复制
"myString".sub(/^(.)/) {$1.upcase}

输出:

代码语言:javascript
复制
"MyString"

代码:

代码语言:javascript
复制
"myString".capitalize

输出:

代码语言:javascript
复制
"Mystring"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18972089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档