Codecademy希望我编写如下代码,以大写我输入的内容的第一个字母:
print "What's your first name?"
firstname = gets.chomp
firstname2 = firstname.capitalize
firstname.capitalize!
puts "Your first name is #{first_name}!"然而,我把它写成:
print "What's your first name?"
firstname = gets.chomp.capitalize
puts "Your first name is #{firstname}!"它们都产生了相同的结果,但我的方法似乎简单得多,而且切中要害。我想知道这两个代码虽然产生了相同的结果,但实际上有什么不同。是否有特定的原因需要使用firstname.capitalize!完成额外的步骤和重复操作,而不是只将capitalize添加到gets
发布于 2014-09-29 23:53:21
capitalize返回第一个字母大写的新字符串
capitalize!修改或修改原始字符串
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"一般来说,改变对象并不被认为是一种好的做法,因为它可能会导致意外的结果。
考虑以下场景:
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!发布于 2014-09-30 00:10:25
capitalize!修改接收器字符串,而capitalize创建新字符串。如果您没有在原始表单中的其他地方使用接收器字符串,则使用前者更有效;它节省了内存。在这样一个短小的脚本中,它不会有太大的不同,但在执行大量巨大字符串操作的较大程序中,它会产生巨大的差异。如果我没记错的话,我读到了一篇由SASS开发人员写的文章,内容是通过用gsub!替换早期版本代码中的gsub,它们获得了巨大的性能改进。
另一方面,如果您希望在大写之前使用形式中的字符串,那么您应该按照自己的方式进行操作。
https://stackoverflow.com/questions/26103869
复制相似问题