mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 15:18:01 +00:00
Add Refer To Implicit Block Argument With It 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).
|
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
||||||
|
|
||||||
_1554 TILs and counting..._
|
_1555 TILs and counting..._
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -1303,6 +1303,7 @@ _1554 TILs and counting..._
|
|||||||
- [Question Mark Operator](ruby/question-mark-operator.md)
|
- [Question Mark Operator](ruby/question-mark-operator.md)
|
||||||
- [Rake Only Lists Tasks With Descriptions](ruby/rake-only-lists-tasks-with-descriptions.md)
|
- [Rake Only Lists Tasks With Descriptions](ruby/rake-only-lists-tasks-with-descriptions.md)
|
||||||
- [Read The First Line From A File](ruby/read-the-first-line-from-a-file.md)
|
- [Read The First Line From A File](ruby/read-the-first-line-from-a-file.md)
|
||||||
|
- [Refer To Implicit Block Argument With It](ruby/refer-to-implicit-block-argument-with-it.md)
|
||||||
- [Rendering ERB](ruby/rendering-erb.md)
|
- [Rendering ERB](ruby/rendering-erb.md)
|
||||||
- [Replace The Current Process With An External Command](ruby/replace-the-current-process-with-an-external-command.md)
|
- [Replace The Current Process With An External Command](ruby/replace-the-current-process-with-an-external-command.md)
|
||||||
- [Require Entire Gemfile In Pry Session](ruby/require-entire-gemfile-in-pry-session.md)
|
- [Require Entire Gemfile In Pry Session](ruby/require-entire-gemfile-in-pry-session.md)
|
||||||
|
|||||||
43
ruby/refer-to-implicit-block-argument-with-it.md
Normal file
43
ruby/refer-to-implicit-block-argument-with-it.md
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
# Refer To Implicit Block Argument With It
|
||||||
|
|
||||||
|
One of the key features of the Ruby 3.4 release is the `it` implicit block
|
||||||
|
argument.
|
||||||
|
|
||||||
|
The vast majority of inline blocks defined in Ruby code receive a single block
|
||||||
|
argument. Typically we name and reference a block argument explictly like so:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
items.map { |item| item * item }
|
||||||
|
```
|
||||||
|
|
||||||
|
Ruby likes to cut away excess syntax when possible. To that end, the implicit
|
||||||
|
`it` block argument has been added. This is an identifier we can reference in
|
||||||
|
the context of a block and its value is the current
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
items = [1,2,3,4,5]
|
||||||
|
|
||||||
|
squares = items.map { it * it }
|
||||||
|
|
||||||
|
pp squares
|
||||||
|
#=> [1, 4, 9, 16, 25]
|
||||||
|
```
|
||||||
|
|
||||||
|
Note: we cannot mix numbered parameters (`_1`, `_2`) with the `it` parameter.
|
||||||
|
If we do, we'll get the following error:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
def method_using_block(a, b)
|
||||||
|
yield(a, b) if block_given?
|
||||||
|
end
|
||||||
|
|
||||||
|
puts method_using_block(4,5) { _2 ** _1 } #=> 625
|
||||||
|
puts method_using_block(4,5) { _2 ** it }
|
||||||
|
# it_block.rb:12: syntax error found (SyntaxError)
|
||||||
|
# 10 |
|
||||||
|
# 11 | puts method_using_block(4,5) { _2 ** _1 }
|
||||||
|
# > 12 | ... it }
|
||||||
|
# | ^~ `it` is not allowed when a numbered parameter is already used
|
||||||
|
```
|
||||||
|
|
||||||
|
[source](https://docs.ruby-lang.org/en/3.4/NEWS_md.html)
|
||||||
Reference in New Issue
Block a user