Ruby 为什么“join”在数组中不大写字符串?

Ruby 为什么“join”在数组中不大写字符串?,ruby,Ruby,我正在写一个方法,将字符串中的每个单词大写。不使用join方法,我可以获得正确的数组(例如david copperfield=[“david”,“copperfield”]): 当Ijoin元素时,它们会恢复为小写。我不知道为什么。任何帮助都将不胜感激。使用破坏性版本的map:map: single_words.map! { |i| i.capitalize} 你必须使用地图而不是映射,因为映射返回新数组,而不是更改初始值 def titleize(words) single_word

我正在写一个方法,将字符串中的每个单词大写。不使用
join
方法,我可以获得正确的数组(例如
david copperfield
=
[“david”,“copperfield”]
):


当I
join
元素时,它们会恢复为小写。我不知道为什么。任何帮助都将不胜感激。

使用破坏性版本的
map
map

single_words.map! { |i| i.capitalize}

你必须使用地图而不是映射,因为映射返回新数组,而不是更改初始值

def titleize(words)
    single_words = words.split(/ /)
    single_words.map! {|i| i.capitalize}
    single_words.join(" ")
end

join
不会将其取消大写。您抛出了大写的结果,并将原始未大写的数组传递给
join

如果您的目的是将由
/
分隔的每个子字符串大写,那么更正常、更好的方法是:

def titleize(words)
  words.gsub(/[^ ]+/, &:capitalize)
end
我不太清楚您为什么要使用数组。

如果您转到文档页面,您会发现它

为self的每个元素调用给定的块一次

创建包含块返回的值的新数组

因此
.map
返回新数组,但不修改您提供的数组。这就是为什么您的方法一直有效,而
.map
是最后一条指令

要修复代码,您可以将
.map
替换为
.map,它修改提供的数组(
单字)
):

或者将
.capitalize
替换为
.capitalize,它修改字符串:

def titleize(words)
  single_words = words.split(/ /)
  single_words.map {|i| i.capitalize!}
  single_words.join(" ")
end
或在
.map
之后立即执行
.join

def titleize(words)
  single_words = words.split(/ /)
  single_words.map {|i| i.capitalize}.join(' ')
end
事实上,您的方法非常简单,只需一行:

def titleize(string)
  string.split.map(&:capitalize).join(' ')
end
def titleize(words)
  single_words = words.split(/ /)
  single_words.map {|i| i.capitalize}.join(' ')
end
def titleize(string)
  string.split.map(&:capitalize).join(' ')
end