mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 15:18:01 +00:00
45 lines
1.1 KiB
Markdown
45 lines
1.1 KiB
Markdown
# Return The Thing Being Printed
|
|
|
|
The [`puts`](https://ruby-doc.org/core-3.0.2/Kernel.html#method-i-puts) method
|
|
is the canonical way of priting things to stdout in Ruby. Notably, its return
|
|
value is always `nil`. Generally this isn't much of an issue, but can be a
|
|
potential gotcha while debugging.
|
|
|
|
Consider the following method whose behavior you are trying to investigate:
|
|
|
|
```ruby
|
|
def process(arg)
|
|
thing = do_something(arg)
|
|
|
|
thing.value
|
|
end
|
|
```
|
|
|
|
I want to print out the value of thing when I execute the code to see what it
|
|
is while debugging. So I add a `puts` statement.
|
|
|
|
```ruby
|
|
def process(arg)
|
|
thing = do_something(arg)
|
|
|
|
puts thing.value
|
|
end
|
|
```
|
|
|
|
Well, I just broke the behavior of `process` because it now returns `nil`
|
|
instead of `thing.value`.
|
|
|
|
I could add an additional line that returns the correct value. Or I could use
|
|
[`p`](https://ruby-doc.org/core-3.0.2/Kernel.html#method-i-p) which both prints
|
|
its argument to stdout and returns it as is.
|
|
|
|
```ruby
|
|
def process(arg)
|
|
thing = do_something(arg)
|
|
|
|
p thing.value
|
|
end
|
|
```
|
|
|
|
[source](https://dev.to/lofiandcode/ruby-puts-vs-print-vs-p-vs-pp-vs-awesome-5akl)
|