Communities

Writing
Writing
Codidact Meta
Codidact Meta
The Great Outdoors
The Great Outdoors
Photography & Video
Photography & Video
Scientific Speculation
Scientific Speculation
Cooking
Cooking
Electrical Engineering
Electrical Engineering
Judaism
Judaism
Languages & Linguistics
Languages & Linguistics
Software Development
Software Development
Mathematics
Mathematics
Christianity
Christianity
Code Golf
Code Golf
Music
Music
Physics
Physics
Linux Systems
Linux Systems
Power Users
Power Users
Tabletop RPGs
Tabletop RPGs
Community Proposals
Community Proposals
tag:snake search within a tag
answers:0 unanswered questions
user:xxxx search by author id
score:0.5 posts with 0.5+ score
"snake oil" exact phrase
votes:4 posts with 4+ votes
created:<1w created < 1 week ago
post_type:xxxx type of post
Search help
Notifications
Mark all as read See all your notifications »
Q&A

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.

Comments on Difference between puts and print for Array

Parent

Difference between puts and print for Array

+2
−0

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)?

History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.
Why should this post be closed?

1 comment thread

General comments (1 comment)
Post
+6
−0

The official ruby documentation explains the observed difference between the outputs of print and puts. The important bits are as follows:


print

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.)

History
Why does this post require attention from curators or moderators?
You might want to add some details to your flag.

1 comment thread

General comments (2 comments)
General comments
hkotsubo‭ wrote over 3 years ago · edited over 3 years ago

Actually, print will add a new line if you set $\ = "\n". The doc mentions that: "If the output record separator ($\) is not nil, it is appended to the output" - as the default value is nil, print won't normally add anything in the end (btw, you can set $\ to any string you like, and that will be added in the end). puts, on the other hand, ignores $\ and always add a newline.

elgonzo‭ wrote over 3 years ago

@hkotsubo‭ good point!