mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 07:08:01 +00:00
Add Return The Thing Being Printed as a Ruby TIL
This commit is contained in:
@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
|
||||
|
||||
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
||||
|
||||
_1303 TILs and counting..._
|
||||
_1304 TILs and counting..._
|
||||
|
||||
---
|
||||
|
||||
@@ -1095,6 +1095,7 @@ _1303 TILs and counting..._
|
||||
- [Require Entire Gemfile In Pry Session](ruby/require-entire-gemfile-in-pry-session.md)
|
||||
- [Rerun Only Failures With RSpec](ruby/rerun-only-failures-with-rspec.md)
|
||||
- [Retry A Block After An Exception](ruby/retry-a-block-after-an-exception.md)
|
||||
- [Return The Thing Being Printed](ruby/return-the-thing-being-printed.md)
|
||||
- [Returning With Sequel](ruby/returning-with-sequel.md)
|
||||
- [rexml Is A Bundled Gem As Of Ruby 3.0.0](ruby/rexml-is-a-bundled-gem-as-of-ruby-3-0-0.md)
|
||||
- [Run An Older Version Of Bundler](ruby/run-an-older-version-of-bundler.md)
|
||||
|
||||
44
ruby/return-the-thing-being-printed.md
Normal file
44
ruby/return-the-thing-being-printed.md
Normal file
@@ -0,0 +1,44 @@
|
||||
# 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)
|
||||
Reference in New Issue
Block a user