Prev: [ANN] Call for Participation for 2010 Workshop on Scheme and Functional Programming
Next: ruby watir on Win2008R2
From: Amir Ebrahimifard on 4 Aug 2010 15:57 Hi What is difference between these 2 codes ? (when I executed these codes result was the same ) --------------------- def welcome1( name ) puts "Hello#{name}" end def welcome2( name ) puts "Hello"+name end welcome1( Amir ) welcome2( Amir ) --------------------- -- Posted via http://www.ruby-forum.com/.
From: Alex Stahl on 4 Aug 2010 16:12 In the first function, you're performing interpolation on the variable; i.e. the #{} construct, when included inside "", indicates to the interpreter to evaluate it as code, not text. In the second function, you're performing concatenation of the string "Hello" with the value of the variable name. In this case, the interpolation is automatic since the variable is outside the "". Hope this helps. On Wed, 2010-08-04 at 14:57 -0500, Amir Ebrahimifard wrote: > Hi > What is difference between these 2 codes ? > (when I executed these codes result was the same ) > > --------------------- > def welcome1( name ) > puts "Hello#{name}" > end > > def welcome2( name ) > puts "Hello"+name > end > > welcome1( Amir ) > welcome2( Amir ) > > ---------------------
From: Marvin Gülker on 4 Aug 2010 16:14 -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Am 04.08.2010 21:57, schrieb Amir Ebrahimifard: > Hi > What is difference between these 2 codes ? > (when I executed these codes result was the same ) > > --------------------- > def welcome1( name ) > puts "Hello#{name}" > end > > def welcome2( name ) > puts "Hello"+name > end > > welcome1( Amir ) > welcome2( Amir ) > > --------------------- Try this: welcome1(3) welcome2(3) You'll see the difference. It's because a string interpolation as in your first example implicitly calls #to_s on it's result. Vale, Marvin -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iQEcBAEBAgAGBQJMWcoKAAoJEDJbypbtvoeic8sH/2xCN2tgVbPe4r876DL/qzp9 1yy7s3mp/42o4C7D4UjRTR1FLZ8gi34EBJy544CAAgOYzBscE0sR7hqp2WxHEPjt WjuB0DTDCBimRF4KJYft2gCwK7ilvTWQMShQYIykS8BHH+KDF7oVLU6W0RjQGwbu 2rCtaHmO68DLIZK/YCBhNP/5T/MVf6jv+9o6KPsWzBTCirsr0G4IiiN9ME98KMoM tI8A7wLOfdhX1K97yJtGEcrhObtNWLKdy8b/mkoK5ejN2+4WPhLVLmhzez3V/X1d 11277TdGvmmpWBBfPfmJ0FJeca78mb5td5zaFhIhTbf7hUrpH6rXII+0xWU9oK4= =NW9K -----END PGP SIGNATURE-----
From: Joel VanderWerf on 4 Aug 2010 16:16
Amir Ebrahimifard wrote: > Hi > What is difference between these 2 codes ? > (when I executed these codes result was the same ) > > --------------------- > def welcome1( name ) > puts "Hello#{name}" > end > > def welcome2( name ) > puts "Hello"+name > end > > welcome1( Amir ) > welcome2( Amir ) > > --------------------- The first calls #to_s and the second calls #to_str. The #to_str method is usually only defined for objects that are already String-like. The #to_s is usually defined for everything. def welcome1( name ) puts "Hello#{name}" end def welcome2( name ) puts "Hello"+name end Amir = Object.new def Amir.to_s puts "to_s" "Amir" end def Amir.to_str puts "to_str" "Amir" end welcome1( Amir ) welcome2( Amir ) |