Bird
Raised Fist0
Rubyprogramming~20 mins

Block syntax (do..end and curly braces) in Ruby - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Ruby Block Syntax Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of block with do..end vs curly braces
What is the output of the following Ruby code?
Ruby
def test_block
  yield
end

result = []
test_block do
  result << 1
end

test_block { result << 2 }

puts result.inspect
A[1, 2]
B[2, 1]
CSyntaxError
D[]
Attempts:
2 left
💡 Hint
Both do..end and curly braces can be used to pass blocks to methods.
❓ Predict Output
intermediate
2:00remaining
Return value of block with do..end vs curly braces
What is the output of this Ruby code?
Ruby
def block_return
  result = yield
  puts result
end

block_return do
  5 + 3
end

block_return { 10 + 2 }
ASyntaxError
B
nil
nil
C
5
10
D
8
12
Attempts:
2 left
💡 Hint
The yield keyword returns the value of the block.
🔧 Debug
advanced
2:00remaining
Identify the syntax error in block usage
Which option contains a syntax error when defining a block in Ruby?
Aarray.map { |x| x * 2 }
Barray.map { |x| x * 2 end }
Carray.map do |x|; x * 2; end
Darray.map do |x| x * 2 end
Attempts:
2 left
💡 Hint
Check if the block delimiters match correctly.
🧠 Conceptual
advanced
2:00remaining
Difference in precedence between do..end and curly braces
Which statement about Ruby block syntax precedence is true?
ABoth have the same precedence
Bdo..end blocks have higher precedence than curly braces
CCurly braces have higher precedence than do..end blocks
DPrecedence depends on the method name
Attempts:
2 left
💡 Hint
Think about how Ruby parses method calls with blocks.
🚀 Application
expert
3:00remaining
Predict output with nested blocks and different syntax
What is the output of this Ruby code?
Ruby
def outer
  yield
end

outer do
  outer { puts 'Inner block' }
  puts 'Outer block'
end
A
Inner block
Outer block
BInner block
CSyntaxError
D
Outer block
Inner block
Attempts:
2 left
💡 Hint
Blocks can be nested and execute in order of yield calls.

Practice

(1/5)
1. Which block syntax is generally preferred for multi-line blocks in Ruby?
easy
A. Both are equally preferred for multi-line blocks
B. { }
C. Neither; Ruby does not support blocks
D. do..end

Solution

  1. Step 1: Understand block syntax options

    Ruby supports two block syntaxes: do..end and curly braces { }.
  2. Step 2: Identify usage for multi-line blocks

    do..end is preferred for multi-line blocks because it improves readability.
  3. Final Answer:

    do..end -> Option D
  4. Quick Check:

    Multi-line blocks use do..end [OK]
Hint: Use do..end for multi-line blocks, braces for single-line [OK]
Common Mistakes:
  • Using curly braces for multi-line blocks reduces readability
  • Thinking Ruby doesn't support blocks
  • Believing both syntaxes are identical in all cases
2. Which of the following is the correct syntax for a single-line block that prints each number in an array?
easy
A. [1, 2, 3].each { |n| puts n }
B. [1, 2, 3].each { n puts | }
C. [1, 2, 3].each (|n| puts n )
D. [1, 2, 3].each do |n| puts n

Solution

  1. Step 1: Identify correct block syntax for single-line

    Single-line blocks use curly braces { } with parameters inside pipes | |.
  2. Step 2: Check syntax correctness

    [1, 2, 3].each { |n| puts n } correctly uses { |n| puts n }. Others have syntax errors.
  3. Final Answer:

    [1, 2, 3].each { |n| puts n } -> Option A
  4. Quick Check:

    Single-line block with braces and pipes [OK]
Hint: Use { |var| ... } for single-line blocks [OK]
Common Mistakes:
  • Missing pipes around block parameters
  • Using do..end without proper line breaks
  • Incorrect placement of pipes or braces
3. What is the output of the following Ruby code?
(1..3).map { |x| x * 2 }
medium
A. [1, 2, 3]
B. [2, 4, 6]
C. [3, 6, 9]
D. SyntaxError

Solution

  1. Step 1: Understand the range and map method

    The range (1..3) produces numbers 1, 2, 3. The map method applies the block to each number.
  2. Step 2: Calculate each mapped value

    Each number is multiplied by 2, resulting in 2, 4, and 6.
  3. Final Answer:

    [2, 4, 6] -> Option B
  4. Quick Check:

    Map doubles each element [OK]
Hint: map applies block to each element and returns new array [OK]
Common Mistakes:
  • Confusing map with each (which returns original array)
  • Expecting a syntax error due to block syntax
  • Misunderstanding range behavior
4. Identify the error in this Ruby code:
5.times do |i| puts i }
medium
A. Missing closing end for the block
B. Missing block parameter pipes | |
C. Incorrect use of curly brace to close a do..end block
D. No error, code runs fine

Solution

  1. Step 1: Check block opening and closing syntax

    The block starts with do but incorrectly ends with a curly brace }.
  2. Step 2: Understand correct block closure

    Blocks opened with do must close with end, not }.
  3. Final Answer:

    Incorrect use of curly brace to close a do..end block -> Option C
  4. Quick Check:

    do..end blocks cannot close with braces [OK]
Hint: Match do with end, braces with braces [OK]
Common Mistakes:
  • Mixing do..end with curly braces
  • Forgetting to close the block
  • Misplacing block parameter pipes
5. Given the array [1, 2, 3, 4], which block syntax correctly filters even numbers and returns them as a new array?
hard
A. [1, 2, 3, 4].select { |n| n.even? }
B. [1, 2, 3, 4].select do |n| n.even?
C. [1, 2, 3, 4].select { n.even? }
D. [1, 2, 3, 4].select do n.even? end

Solution

  1. Step 1: Understand the select method and block parameters

    select filters elements for which the block returns true. The block must receive each element as a parameter.
  2. Step 2: Check syntax correctness

    [1, 2, 3, 4].select { |n| n.even? } correctly uses curly braces with block parameter |n| and calls n.even?. [1, 2, 3, 4].select do |n| n.even? has a syntax error (missing end). [1, 2, 3, 4].select { n.even? } misses block parameters. [1, 2, 3, 4].select do n.even? end misses pipes around parameter.
  3. Final Answer:

    [1, 2, 3, 4].select { |n| n.even? } -> Option A
  4. Quick Check:

    Curly braces with pipes for single-line filter [OK]
Hint: Use { |var| condition } for concise filtering blocks [OK]
Common Mistakes:
  • Omitting block parameters
  • Mixing do..end without pipes for parameters
  • Using incorrect block syntax causing errors
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard