此代码将字符串中每个单词的首字母大写。 例如“这是一个句子”变成“这是一个句子”。
def capitalize_words(string)
words = string.split(" ")
idx = 0
while idx < words.length
word = words[idx]
word[0] = word[0].upcase
words[idx] = word #this line of code can be made redundant, but why?
idx += 1
end
return words.join(" ")
end
在while语句中,我不明白为什么第三行是不必要的。第二行将单词的首字母设置为大写:
word[0] = word[0].upcase
while 语句如何知道返回上一行
word = words[idx]
将新的大写字母单词放回单词数组中?我认为当代码执行时,它总是以正向方式工作,如果这种理解不正确,请告诉我。
最佳答案
这是因为 word
变量持有对象的引用 - 与 words
数组中的对象相同。所以如果你修改这个对象,数组中的对象也会被修改,因为它是一样的。
顺便说一句,您在这里尝试做的事情可以更容易地完成:
string.split(' ').map(&:capitalize).join(' ')
正如 Stefan 所建议的:请记住 capitalize
不仅将第一个字符转换为大写,而且还将所有剩余字符转换为小写。如果这不是你想要的,你也可以这样做:
string.split(' ').map { |word| word.slice(0, 1).upcase + word.slice(1..-1) }
或将 Stefan 的解决方案与正则表达式一起使用:
string.gsub(/\b\w/) { |ch| ch.upcase }
请记住,正则表达式中的 \b
不仅会按空格“拆分”您的单词,还会按任何单词边界“拆分”。
关于ruby - 在 while 循环中设置变量 (Ruby),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28233704/