String concatetenation + vs <<

So I have the following:

flash[:success] = 'Your payment has completed. Please contact ' +
                         @order.seller.name + ' (mobile: ' +
                         @order.seller.mobile_number + ', email: ' +
                         @order.seller.email + ')'

Strangely inside this method, I can’t seem to do string interpolation
and
it prints ‘@order.seller.name’. So that is a strange issue.

But the main thing that puzzles me is should I be replacing + with <<
here?
I read somewhere the performance is better but I really hate seeing <<
in
my code. It just seems ugly and raises my blood pressure for some
reason.

On 16 March 2014 04:46, Brandon [email protected] wrote:

But the main thing that puzzles me is should I be replacing + with << here?
I read somewhere the performance is better but I really hate seeing << in my
code. It just seems ugly and raises my blood pressure for some reason.

I think this would be much more readable
flash[:success] = “Your payment has completed. Please contact
#{@order.seller.name} (mobile: #{@order.seller.mobile_number}, email:
#{@order.seller.email} )”

Colin

El domingo, 16 de marzo de 2014 09:54:06 UTC+1, Colin L. escribió:

and it
#{@order.seller.name} (mobile: #{@order.seller.mobile_number}, email:
#{@order.seller.email} )"

Colin

That s really odd, I think that writing like: flash[:success] = “Your
payment has completed. Please contact #{@order.seller.name} (mobile:
#{@order.seller.mobile_number}, email:
#{@order.seller.email} )” should interpolate it.
The only rule I know is that double quotes are the ones to use in string
interpolation.
I hope you found the solution.
And please if you find it share it.

The operator << is better to add info into a variable.
For example:

name = “”
name.object_id
=> 70341910843080

name << "Jhon "
name.object_id
=> 70341910843080

name << "Doe "
name.object_id
=> 70341910843080

Note that the object_id is always the same.
It’s not create a new object.

Now, let see this:
name = “”
name.object_id
=> 70341910594080

name += “John”
name.object_id
=> 70341910549640

name += " Doe"
name.object_id
=> 70341910514060

Note that always a new object will be created.

But if you wanna put a String with interpolation into a variable, how
this:
flash[:success] = “Your payment has completed. Please contact #{@
order.seller.name} (mobile: #{@order.seller.mobile_number}, email:
#{@order.seller.email} )”

I’ll do the same way that you, because I lost just a little performance,
but my code would be cleaner.

Or you prefer:
flash[:success] = "Your payment has completed. Please contact "
flash[:success] << @order.seller.name
flash[:success] << "(mobile: "
flash[:success] << @order.seller.mobile_number
flash[:success] << ", email: "
flash[:success] << @order.seller.email
flash[:success] << “)”

flash[:success]

rsrs… Ruby is clean man. Your interpolation is the better way.
flash[:success] = “Your payment has completed. Please contact #{@
order.seller.name} (mobile: #{@order.seller.mobile_number}, email:
#{@order.seller.email} )”