Hi,
I wonder what is the difference between s=s+â?aâ? ans s<< â?aâ??
Somebody told me that s<< â?aâ? concatenates the string without mutation.
Is that right?
Thanks,
Alan
Hi,
I wonder what is the difference between s=s+â?aâ? ans s<< â?aâ??
Somebody told me that s<< â?aâ? concatenates the string without mutation.
Is that right?
Thanks,
Alan
On Jun 21, 2006, at 3:15 PM, Alan M. wrote:
–
Posted via http://www.ruby-forum.com/.
Someone told you wrong.
s = s + “a” is concatenate s and “a” and return a new string, bind it
to the variable a.
s << “a” is append “a” to the string referenced by the variable s. It
changes s in place.
Of course, this is exactly the kind of question to be answered by ri.
ri String#<<
ri String#+
On 6/21/06, Alan M. [email protected] wrote:
Hi,
I wonder what is the difference between s=s+“a” ans s<< “a”?
s = s + “a”
(1) compute a new String object “s” + a
(2) set s as a reference to the newly created object
s<<“a”
(1) append “a” to the String object s refers to.
The latter is much faster and should be prefered when possible (it will
not
be possible if s is frozen e.g.)
Cheers
Robert
Somebody told me that s<< “a” concatenates the string without mutation.
Is that right?
Thanks,
Alan–
Posted via http://www.ruby-forum.com/.
–
Deux choses sont infinies : l’univers et la bêtise humaine ; en ce qui
concerne l’univers, je n’en ai pas acquis la certitude absolue.
2006/6/21, Simon Kröger [email protected]:
I think
s = s + “a” #
or
s += “a”should be the norm as long as you do not know that using it will cause
you problems (really only performance problems come to my mind)
I use the rule exactly the other way round: usually use << unless that
might cause problems. There’s a lot of code out there that does +=
while all it wants to do is appending. += is less efficient and with
my C++ background << more looks like “append”.
end
hello = ‘hello’
greet_matz hello
greet_nobu hello#=> hello matz!
#=> hello matz! nobu!you will get what you expect if you use +=
It depends on what you expect. If methods are expected to get
something that they append stuff to then the observed behavior is
exactly what you expect and want. ![]()
For example, if you write a method that should append info about the
current instance to something then you should use << because then even
an IO object can be passed and the code still works as expected.
As generally, you should know your tools and be knowing what you do. ![]()
Kind regards
robert
On 6/21/06, Simon Kröger [email protected] wrote:
(1) compute a new String object “s” + a
I think
s = s + “a” #
or
s += “a”should be the norm as long as you do not know that using it will cause
you problems (really only performance problems come to my mind)
s << “a”
is just what you should do instead
of
s = s+ “a”
unless of course you get paid for GC ![]()
Have a look at this:
def greet_matz greeting
greeting << ’ matz!’
puts greeting
end
Calling writer methods on parameters is asking for side effects, that
might
be good or bad, I do not want to discuss that right now, but has
nothing
to do with the question of the OP.
def greet_nobu greeting
you will get what you expect if you use +=
Forgive me for being blunt: I will get what I expect if I use <<, I
might
not get what you expected.
cheers
Simon
Fortunately I did not state my favorite way to use puts
puts some_variable * 1 << “some text” << …
![]()
Cheers
Robert
–
Deux choses sont infinies : l’univers et la bêtise humaine ; en ce qui
concerne l’univers, je n’en ai pas acquis la certitude absolue.
Robert D. wrote:
s<<“a”
(1) append “a” to the String object s refers to.
The latter is much faster and should be prefered when possible (it will not
be possible if s is frozen e.g.)
I think
s = s + “a” #
or
s += “a”
should be the norm as long as you do not know that using it will cause
you problems (really only performance problems come to my mind)
def greet_matz greeting
greeting << ’ matz!’
puts greeting
end
def greet_nobu greeting
greeting << ’ nobu!’
puts greeting
end
#=> hello matz!
#=> hello matz! nobu!
you will get what you expect if you use +=
cheers
Simon
Most readable + safe for me is e.g.:
puts “Hello, #{name}!”
puts “your calculation: #{arg1} * #{arg2} = #{arg1 * arg2}”
Robert D. schrieb:
will cause
you problems (really only performance problems come to my mind)
I use the rule exactly the other way round: usually use << unless that
might cause problems. There’s a lot of code out there that does +=
while all it wants to do is appending. += is less efficient and with
my C++ background << more looks like “append”.
Well, if you realy know what you do and if ‘that might cause problems’
there is of course no problem with <<. ‘+= is less efficient’ smells
like
premature optimization.
you will get what you expect if you use +=
It depends on what you expect. If methods are expected to get
something that they append stuff to then the observed behavior is
exactly what you expect and want.
Hmm, I (but that may be just me) wouldn’t write a method that ‘get
something that they append stuff to’. I would write a method which will
return the stuff and let the caller append it to whatever he wishes.
(I like it a bit functional style and do not like side effects)
For example, if you write a method that should append info about the
current instance to something then you should use << because then even
an IO object can be passed and the code still works as expected.
Yes, if I would write such a method, yes. If appending is exactly the
operation I want, I use it. sure.
As generally, you should know your tools and be knowing what
you do.
That sums it up quite perfect.
Kind regards
robert
cheers
Simon
From: Pete [mailto:[email protected]]
Sent: Wednesday, June 21, 2006 11:45 PMMost readable + safe for me is e.g.:
puts “Hello, #{name}!”
puts “your calculation: #{arg1} * #{arg2} = #{arg1 * arg2}”
In case this wasn’t obvious: this was an example.
As there is no syntactical difference between pass by value
and pass by reference in ruby I try to avoid modifying
parameters and would use += in favour of <<. (at least in such
cases)
cheers
Simon
p.s.: oh well, I know there is no such thing as pass by value
in ruby at all, it just feels like it for immediate values.
From: Robert D. [mailto:[email protected]]
Sent: Wednesday, June 21, 2006 11:10 PM
s << “a”
is just what you should do instead
of
s = s+ “a”
unless of course you get paid for GC
I think that should be solved in the interpreter not by the
programmer. Meanwhile you are right, of course << is more
efficient.
Calling writer methods on parameters is asking for side
effects, that might
I guess that was my whole point.
be good or bad, I do not want to discuss that right now, but
has nothing
to do with the question of the OP.
That might be true.
Fortunately I did not state my favorite way to use puts
puts some_variable * 1 << “some text” << …
![]()
cheers
Simon
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.
Sponsor our Newsletter | Privacy Policy | Terms of Service | Remote Ruby Jobs