Building a String
Sometimes we need to build a string.
tap
'a'.tap { |it| it << 'b' } # => 'ab'
The above works because we mutate with <<
in the block which is then returned
by tap
.
'a'.tap { |it| it += 'b' } # => 'a'
We can’t use +=
as this is assignment and creates a new object instead of
mutating the value returned by tap
.
itself
'a'.itself { |it| it << 'b' } # => 'a'
Using itself
the block does not seem to be executed, e.g. 'a'.itself { raise }
does not raise.
Update: All methods can accept a block which is sliently ignored if the method does not use it.
yield_self
We could also use yield_self
but this only works because <<
returns the new string.
'a'.yield_self { |it| it << 'b' } # => 'ab'
The result of the block is returned, not the reciver (original string):
'a'.yield_self { |it| it << 'b'; 'v' } # => 'v'