在以下Integer对象数组中,Array#sum
对元素求和:
[1, 2].sum #=> 3
对于一个字符串数组,我希望sum
返回总连接数(在这种情况下为'12'
)但是收到错误:
['1', '2'].sum
#Traceback (most recent call last):
# 4: from /usr/local/rvm/rubies/ruby-2.5.0/bin/irb:11:in `<main>'
# 3: from (irb):46
# 2: from (irb):46:in `sum'
# 1: from (irb):46:in `+'
#TypeError (String can't be coerced into Integer)
如果有可能,我如何让['1', '2'].sum
返回'12'
?
答案 0 :(得分:3)
Array#sum
定义了一个默认为0
的参数。您的第一个代码段相当于:
[1, 2].sum(0) #=> 3
您的第二个代码段相当于:
['1', '2'].sum(0)
如错误消息所示,您最终尝试将字符串'1'
添加到整数0
等,Ruby将不允许(此处没有类型强制)。因此,为了使其工作,请将空字符串定义为参数:
['1', '2'].sum('') #=> "12"
现在您正在进行'' + '1' + '2'
等。有关详细信息,请参阅docs,其中还指出,在对字符串数组求和时,join
将比sum
更快。另外,join
更加惯用。