2015-12-19 2 views
0

В этом коде:`inject` не добавляет пустое пространство в аккумуляторе

b = ["here", "are", "things"] 
b.inject { |str, v| str+="#{v} " } 
# => "hereare things " 

не возвращаемое значение будет "here are things"? Я предполагаю, что он передает первое значение в аккумулятор str. Есть ли способ вернуть "here are things "?

+0

у, знаете, я мог бы использовать присоединиться - было более интересно поведение здесь. Я использовал только инъекцию при добавлении целых чисел, но мне было просто любопытно, могу ли я использовать его так, как я хотел. – timpone

ответ

4

Я бы предположить, что это проходит в первом значении в аккумулятор

Правильно, потому что начальное значение не определенно, первый элемент коллекции становится начальным значением. Фикс? Укажите начальное значение:

b = ['here', 'are', 'things'] 
b.inject('') { |memo, elem| memo + "#{elem} " } # => "here are things " 
1

Добавить место перед словом, вот так. Это не имеет конечного пробела в результате.

["here", "are", "things"].inject { |str, v| str+=" #{v}" } 
#=> "here are things" 

Вы также могли бы сделать что-то, как показано ниже, и до сих пор не имеют отставая пространство

['here', 'are', 'things'].inject { |m, e| "#{m} #{e}" } 
#=> "here are things" 
+0

Рассматривая его вопрос, конечное пространство кажется желательным. –

+0

Я вижу, я пытался подражать «присоединяться» к поведению –

Смежные вопросы