Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
Difference between puts and print for Array
I have an array
friends = Array.new
friends[0] = "Mad man"
friends[1] = "hey"
There's two ways to print it (using print
or puts
). At first I tried print
print friends
which gave:
["Mad man", "Hey"]
When I tried puts
puts friends
I got:
Mad man
Hey
I thought that the difference between puts
and print
is puts
add a new line and, print
doesn't. But, why was print
directly giving output of that array (and not separating elements)?
1 answer
The official ruby documentation explains the observed difference between the outputs of print
and puts
. The important bits are as follows:
For any non-string object given as argument (such as an array, for example), print
invokes the object's to_s
method and outputs the resulting string returned by to_s
. Quote from doc (link):
Each given object that isn't a string will be converted by calling its to_s method.
And as it so happens, the to_s
method of your array produces the ["Mad man", "Hey"]
output you observe (and which is also documented, link).
puts
On the other hand, puts
behaves differently when provided with an array. Quote from doc (link):
If called with an array argument, writes each element on a new line. Each given object that isn't a string or array will be converted by calling its to_s method.
Contrary to print
, puts
does NOT call the array's to_s
method but rather directly outputs the array elements line-by-line.
By the way, you can also achieve almost the same output as print
with puts
by explicitly invoking the to_s
method like:
puts friends.to_s
which will output
["Mad man", "hey"]
(It is only almost the same output as print friends
, since puts
writes a newline at the end of the output, whereas print
does not -- unless of course you change the output record separator to a newline. See also hkotsubo's comment below.)
1 comment thread