This blog is part of our Ruby 2.4 series.
In Ruby, we use #concat to append a string to another string or an element to the array. We can also use #prepend to add a string at the beginning of a string.
Ruby 2.3
String#concat and Array#concat
1 2string = "Good" 3string.concat(" morning") 4#=> "Good morning" 5 6array = ['a', 'b', 'c'] 7array.concat(['d']) 8#=> ["a", "b", "c", "d"] 9
String#prepend
1 2string = "Morning" 3string.prepend("Good ") 4#=> "Good morning" 5
Before Ruby 2.4, we could pass only one argument to these methods. So we could not add multiple items in one shot.
1 2string = "Good" 3string.concat(" morning", " to", " you") 4#=> ArgumentError: wrong number of arguments (given 3, expected 1) 5
Changes with Ruby 2.4
In Ruby 2.4, we can pass multiple arguments and Ruby processes each argument one by one.
String#concat and Array#concat
1 2string = "Good" 3string.concat(" morning", " to", " you") 4#=> "Good morning to you" 5 6array = ['a', 'b'] 7array.concat(['c'], ['d']) 8#=> ["a", "b", "c", "d"] 9
String#prepend
1 2string = "you" 3string.prepend("Good ", "morning ", "to ") 4#=> "Good morning to you" 5
These methods work even when no argument is passed unlike in previous versions of Ruby.
1 2"Good".concat 3#=> "Good" 4
Difference between concat and shovel << operator
Though shovel << operator can be used interchangeably with concat when we are calling it once, there is a difference in the behavior when calling it multiple times.
1 2str = "Ruby" 3str << str 4str 5#=> "RubyRuby" 6 7str = "Ruby" 8str.concat str 9str 10#=> "RubyRuby" 11 12str = "Ruby" 13str << str << str 14#=> "RubyRubyRubyRuby" 15 16str = "Ruby" 17str.concat str, str 18str 19#=> "RubyRubyRuby" 20
So concat behaves as appending present content to the caller twice. Whereas calling << twice is just sequence of binary operations. So the argument for the second call is output of the first << operation.