使用`Array#sum`对数组中的字符串元素求和

时间:2018-04-10 08:35:51

标签: ruby

在以下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'

1 个答案:

答案 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更加惯用。