Blocks, Procs, and the "&" Bridge
📰 Dev.to · Figsy
Learn how to work with blocks and procs in Ruby, and how the '&' symbol bridges them
Action Steps
- Define a block in Ruby using the '{ ... }' or 'do ... end' syntax
- Use the '&' symbol to convert a block into a proc
- Use the '&' symbol to convert a proc into a block
- Apply the 'yield' keyword to execute a block inside a method
- Test the difference between blocks and procs in Ruby
Who Needs to Know This
Ruby developers and programmers who want to improve their understanding of blocks and procs will benefit from this article, as it provides a clear explanation of the concepts and their usage
Key Insight
💡 The '&' symbol is used to convert between blocks and procs in Ruby
Share This
💡 Understand how to work with blocks and procs in Ruby using the '&' bridge
Key Takeaways
Learn how to work with blocks and procs in Ruby, and how the '&' symbol bridges them
Full Article
Title: Blocks, Procs, and the "&" Bridge
URL Source: https://dev.to/figsify/blocks-procs-and-the-bridge-3bn0
Published Time: 2026-06-20T19:46:19Z
Markdown Content:
# Blocks, Procs, and the "&" Bridge - DEV Community
[Skip to content](https://dev.to/figsify/blocks-procs-and-the-bridge-3bn0#main-content)
[](https://dev.to/)
[Powered by Algolia](https://www.algolia.com/developers/?utm_source=devto&utm_medium=referral)
[Log in](https://dev.to/enter?signup_subforem=1)[Create account](https://dev.to/enter?signup_subforem=1&state=new-user)
## DEV Community
0 Add reaction
0 Like 0 Unicorn 0 Exploding Head 0 Raised Hands 0 Fire
0 Jump to Comments 0 Save Boost
Copy link
Copied to Clipboard
[Share to X](https://twitter.com/intent/tweet?text=%22Blocks%2C%20Procs%2C%20and%20the%20%22%26%22%20Bridge%22%20by%20Figsy%20%23DEVCommunity%20https%3A%2F%2Fdev.to%2Ffigsify%2Fblocks-procs-and-the-bridge-3bn0)[Share to LinkedIn](https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fdev.to%2Ffigsify%2Fblocks-procs-and-the-bridge-3bn0&title=Blocks%2C%20Procs%2C%20and%20the%20%22%26%22%20Bridge&summary=%26amp%3Bblk%20in%20a%20parameter%20list%20turns%20a%20block%20into%20a%20Proc%3B%20%26amp%3Bproc%20at%20a%20call%20turns%20a%20Proc%20back%20into%20a...&source=DEV%20Community)[Share to Facebook](https://www.facebook.com/sharer.php?u=https%3A%2F%2Fdev.to%2Ffigsify%2Fblocks-procs-and-the-bridge-3bn0)[Share to Mastodon](https://s2f.kytta.dev/?text=https%3A%2F%2Fdev.to%2Ffigsify%2Fblocks-procs-and-the-bridge-3bn0)
[Share Post via...](https://dev.to/figsify/blocks-procs-and-the-bridge-3bn0#)[Report Abuse](https://dev.to/report-abuse)
[](https://dev.to/figsify)
[Figsy](https://dev.to/figsify)
Posted on Jun 20
# Blocks, Procs, and the "&" Bridge
[#ruby](https://dev.to/t/ruby)[#rails](https://dev.to/t/rails)[#programming](https://dev.to/t/programming)
> `&blk` in a parameter list turns a block into a Proc; `&proc` at a call turns a Proc back into a block.
## [](https://dev.to/figsify/blocks-procs-and-the-bridge-3bn0#1-a-block-is-syntax-not-an-object) 1. A block is syntax, not an object
A block is the `{ ... }` or `do ... end` you attach to a method call. It is not a value you can hold by itself.
You can't store a block in a variable — Ruby won't even parse it:
```
b = { |x| x * 2 } # SyntaxError
# Ruby reads { } here as a hash, not a block.
```
A method can carry at most one block:
```
[1, 2, 3].each { |x| puts x } # fine — exactly one block
# There is no syntax to attach a second block to the same call.
```
Inside a method you reach the block with `yield`:
```
def run
yield # runs whatever block was attached
yield # you can run it again
end
run { puts "hi" } # prints: hi hi
```
A block is _not_ a normal argument. It rides along separately from the things in the paren
URL Source: https://dev.to/figsify/blocks-procs-and-the-bridge-3bn0
Published Time: 2026-06-20T19:46:19Z
Markdown Content:
# Blocks, Procs, and the "&" Bridge - DEV Community
[Skip to content](https://dev.to/figsify/blocks-procs-and-the-bridge-3bn0#main-content)
[](https://dev.to/)
[Powered by Algolia](https://www.algolia.com/developers/?utm_source=devto&utm_medium=referral)
[Log in](https://dev.to/enter?signup_subforem=1)[Create account](https://dev.to/enter?signup_subforem=1&state=new-user)
## DEV Community
0 Add reaction
0 Like 0 Unicorn 0 Exploding Head 0 Raised Hands 0 Fire
0 Jump to Comments 0 Save Boost
Copy link
Copied to Clipboard
[Share to X](https://twitter.com/intent/tweet?text=%22Blocks%2C%20Procs%2C%20and%20the%20%22%26%22%20Bridge%22%20by%20Figsy%20%23DEVCommunity%20https%3A%2F%2Fdev.to%2Ffigsify%2Fblocks-procs-and-the-bridge-3bn0)[Share to LinkedIn](https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fdev.to%2Ffigsify%2Fblocks-procs-and-the-bridge-3bn0&title=Blocks%2C%20Procs%2C%20and%20the%20%22%26%22%20Bridge&summary=%26amp%3Bblk%20in%20a%20parameter%20list%20turns%20a%20block%20into%20a%20Proc%3B%20%26amp%3Bproc%20at%20a%20call%20turns%20a%20Proc%20back%20into%20a...&source=DEV%20Community)[Share to Facebook](https://www.facebook.com/sharer.php?u=https%3A%2F%2Fdev.to%2Ffigsify%2Fblocks-procs-and-the-bridge-3bn0)[Share to Mastodon](https://s2f.kytta.dev/?text=https%3A%2F%2Fdev.to%2Ffigsify%2Fblocks-procs-and-the-bridge-3bn0)
[Share Post via...](https://dev.to/figsify/blocks-procs-and-the-bridge-3bn0#)[Report Abuse](https://dev.to/report-abuse)
[](https://dev.to/figsify)
[Figsy](https://dev.to/figsify)
Posted on Jun 20
# Blocks, Procs, and the "&" Bridge
[#ruby](https://dev.to/t/ruby)[#rails](https://dev.to/t/rails)[#programming](https://dev.to/t/programming)
> `&blk` in a parameter list turns a block into a Proc; `&proc` at a call turns a Proc back into a block.
## [](https://dev.to/figsify/blocks-procs-and-the-bridge-3bn0#1-a-block-is-syntax-not-an-object) 1. A block is syntax, not an object
A block is the `{ ... }` or `do ... end` you attach to a method call. It is not a value you can hold by itself.
You can't store a block in a variable — Ruby won't even parse it:
```
b = { |x| x * 2 } # SyntaxError
# Ruby reads { } here as a hash, not a block.
```
A method can carry at most one block:
```
[1, 2, 3].each { |x| puts x } # fine — exactly one block
# There is no syntax to attach a second block to the same call.
```
Inside a method you reach the block with `yield`:
```
def run
yield # runs whatever block was attached
yield # you can run it again
end
run { puts "hi" } # prints: hi hi
```
A block is _not_ a normal argument. It rides along separately from the things in the paren
DeepCamp AI