1
0
mirror of https://github.com/jbranchaud/til synced 2026-01-03 07:08:01 +00:00

Add Block Syntaxes Have Different Precedence as a Ruby TIL

This commit is contained in:
jbranchaud
2024-11-28 14:06:07 -06:00
parent e0db60f6ce
commit b329d36888
2 changed files with 31 additions and 1 deletions

View File

@@ -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).
_1519 TILs and counting..._
_1520 TILs and counting..._
---
@@ -1188,6 +1188,7 @@ _1519 TILs and counting..._
- [Audit Your Ruby Project For Any CVEs](ruby/audit-your-ruby-project-for-any-cves.md)
- [Assoc For Hashes](ruby/assoc-for-hashes.md)
- [Block Comments](ruby/block-comments.md)
- [Block Syntaxes Have Different Precedence](ruby/block-syntaxes-have-different-precedence.md)
- [Build HTTP And HTTPS URLs](ruby/build-http-and-https-urls.md)
- [Chaining Multiple RSpec Change Matchers](ruby/chaining-multiple-rspec-change-matchers.md)
- [Check For Any Overlaps In List Of Ranges](ruby/check-for-any-overlaps-in-list-of-ranges.md)

View File

@@ -0,0 +1,29 @@
# Block Syntaxes Have Different Precedence
There are two syntaxes for defining a block in Ruby. The semantically shorthand
syntax uses the curly braces (`{}`). The semantically multi-line syntax uses
`do` and `end`. For nearly all intents and purposes they are interchangable.
It is, however, worth noting that the `do`/`end` version has a lower precedence
than the already low precedence of `{}`. That said, you have to write some
weird code for this to become an issue.
Let's say we have two methods, `method_one` and `method_two`. They are both
called on the same line like below and then followed by a block argument. Which
method receives the block argument?
```ruby
method_one method_two { |n|
puts "Executing a block: #{n}"
}
method_one method_two do |n|
puts "Executing a block: #{n}"
end
```
In the first case, with the curly braces, `method_two` receives the block as an
argument. In the second case, with the `do`/`end`, `method_one` receives the
block as an argument.
[source](http://localhost:3131/ruby-operators/curly-braces#block-shorthand)