2017-07-04 37 views
0

我想分割一个字符串来大写每个单词。Ruby拆分不能在字符串上工作?

代码:

def titleize(a) 
little_words = %w(a an the) 
#a = %w(a quick brown fox jumps) --> works if an array is specifically used. 
a.split(" ") 
a.each do |i| 
    if !little_words.include? "#{i}" 
    i.capitalize! 
    end 
end 
g = a.join(" ") 
return g 
end 

print titleize("a quick brown fox jump") 

错误:

`titleize': undefined method `each' for "a quick brown fox jump":String (NoMethodError) 

不过,我遇到了此问题。据我所知,错误是说我的变量'a'是一个不包含'each'方法的字符串。我已经应用'split(“”)'将字符串转换为数组。为什么它不起作用?

+0

您使用分割,但你不存储所产生的阵任何地方。 “a”仍然是一个没有“每个”方法的字符串。 – Secespitus

回答

2

因为你忽略了什么方法将返回

a = a.split(" ") 

而且" "是分裂的默认,所以你可以简单的写

a = a.split 
+0

谢谢。我知道ruby有一些方法,比如“i.to_s”,它将整数转换为字符串,而不必处理返回。是否有任何等价的分裂? – Carrein

+0

'to_s'返回一个字符串,但不修改被调用的对象。一样的。有一些方法在原地修改对象,但它们返回相同的“类型”,在这种情况下,对字符串调用split并返回一个数组,不可能 – Ursus

+1

@axiac'!'只是一个约定,有几个没有'!'的方法修改接收器。我认为更重要的是一个对象不能改变其身份的事实。一个字符串可以修改它自己,即它的字符,但它不能将它自己变成一个数组或一个整数。一个字符串总是一个字符串。 – Stefan