首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用`capitalize`或` `capitalize!`

使用`capitalize`或` `capitalize!`
EN

Stack Overflow用户
提问于 2014-09-29 23:49:17
回答 2查看 657关注 0票数 0

Codecademy希望我编写如下代码,以大写我输入的内容的第一个字母:

代码语言:javascript
复制
print "What's your first name?"
firstname = gets.chomp
firstname2 = firstname.capitalize
firstname.capitalize!
puts "Your first name is #{first_name}!"

然而,我把它写成:

代码语言:javascript
复制
print "What's your first name?"
firstname = gets.chomp.capitalize
puts "Your first name is #{firstname}!"

它们都产生了相同的结果,但我的方法似乎简单得多,而且切中要害。我想知道这两个代码虽然产生了相同的结果,但实际上有什么不同。是否有特定的原因需要使用firstname.capitalize!完成额外的步骤和重复操作,而不是只将capitalize添加到gets

EN

回答 2

Stack Overflow用户

发布于 2014-09-29 23:53:21

capitalize返回第一个字母大写的新字符串

capitalize!修改或修改原始字符串

代码语言:javascript
复制
2.1.1 :001 > string = 'hello'
 => "hello"
2.1.1 :002 > string.capitalize
 => "Hello"
2.1.1 :003 > string
 => "hello"
2.1.1 :004 > string.capitalize!
 => "Hello"
2.1.1 :005 > string
 => "Hello"

一般来说,改变对象并不被认为是一种好的做法,因为它可能会导致意外的结果。

考虑以下场景:

代码语言:javascript
复制
def i_will_capitalize(string)
  string.capitalize!
  puts string
end

def i_expect_the_original_string(string)
  puts string
end

string = 'hello'

i_will_capitalize(string) # Returns 'Hello'
i_expect_the_original_string(string) # Returns 'Hello' as well!
票数 2
EN

Stack Overflow用户

发布于 2014-09-30 00:10:25

capitalize!修改接收器字符串,而capitalize创建新字符串。如果您没有在原始表单中的其他地方使用接收器字符串,则使用前者更有效;它节省了内存。在这样一个短小的脚本中,它不会有太大的不同,但在执行大量巨大字符串操作的较大程序中,它会产生巨大的差异。如果我没记错的话,我读到了一篇由SASS开发人员写的文章,内容是通过用gsub!替换早期版本代码中的gsub,它们获得了巨大的性能改进。

另一方面,如果您希望在大写之前使用形式中的字符串,那么您应该按照自己的方式进行操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26103869

复制
相关文章

相似问题

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