Bird
Raised Fist0
Rubyprogramming~5 mins

Yield to execute blocks in Ruby - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does the yield keyword do in Ruby?

yield pauses the method and runs the block of code given to the method, then returns to the method.

Click to reveal answer
beginner
How do you pass a block to a method in Ruby?

You write the method call with a block using { ... } or do ... end after the method name.

Click to reveal answer
intermediate
What happens if a method calls yield but no block is given?

Ruby raises a LocalJumpError because it expects a block to run but none was provided.

Click to reveal answer
intermediate
How can you check if a block was given before calling yield?

Use the method block_given? which returns true if a block is passed, otherwise false.

Click to reveal answer
beginner
Write a simple Ruby method that uses yield to run a block.
def greet
  puts "Hello"
  yield
  puts "Goodbye"
end

greet { puts "Nice to meet you!" }
Click to reveal answer
What does yield do inside a Ruby method?
ARaises an error always
BReturns the method immediately
CDefines a new block
DRuns the block passed to the method
How do you write a block when calling a method in Ruby?
AUsing <code>{ ... }</code> or <code>do ... end</code> after the method call
BInside parentheses after the method name
CUsing square brackets <code>[ ... ]</code>
DBlocks are not allowed in Ruby
What method checks if a block was given to a Ruby method?
Ayield?
Bblock_given?
Chas_block?
Dblock?
What error occurs if yield is called without a block?
ASyntaxError
BNoMethodError
CLocalJumpError
DArgumentError
Which is a correct way to use yield in a method?
Adef example; yield; end
Bdef example; yield?; end
Cdef example; yield(); end
Ddef example; yield block; end
Explain how yield works in Ruby methods and why it is useful.
Think about how a method can run extra code given from outside.
You got /4 concepts.
    Describe how to safely use yield when a block might not be given.
    How to prevent errors if no block is passed?
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the yield keyword do in a Ruby method?
      easy
      A. It runs the block of code passed to the method.
      B. It returns the method's value immediately.
      C. It defines a new method inside the current method.
      D. It pauses the method execution permanently.

      Solution

      1. Step 1: Understand the role of yield

        The yield keyword is used inside a method to call the block that was passed to that method.
      2. Step 2: Differentiate from other keywords

        Unlike return or method definitions, yield specifically executes the block given to the method.
      3. Final Answer:

        It runs the block of code passed to the method. -> Option A
      4. Quick Check:

        Yield executes block = A [OK]
      Hint: Yield always runs the block given to the method [OK]
      Common Mistakes:
      • Thinking yield returns method value
      • Confusing yield with return
      • Assuming yield defines a method
      2. Which of the following is the correct syntax to use yield with an argument inside a method?
      easy
      A. def example; yield(5); end
      B. def example; yield5; end
      C. def example; yield = 5; end
      D. def example; yield: 5; end

      Solution

      1. Step 1: Recall yield syntax with arguments

        To pass arguments to the block, yield must be called with parentheses around the arguments, like yield(5).
      2. Step 2: Check other options for syntax errors

        Options B, C, and D are incorrect because they either miss parentheses or use invalid syntax.
      3. Final Answer:

        def example; yield(5); end -> Option A
      4. Quick Check:

        Yield with args uses parentheses = A [OK]
      Hint: Use parentheses to pass arguments with yield [OK]
      Common Mistakes:
      • Omitting parentheses when passing arguments
      • Using assignment (=) with yield
      • Using colon (:) instead of parentheses
      3. What will be the output of the following Ruby code?
      def greet
        yield("Alice")
      end
      
      greet { |name| puts "Hello, #{name}!" }
      medium
      A. Error: no block given
      B. Hello, Alice!
      C. Hello, !
      D. Hello, name!

      Solution

      1. Step 1: Understand yield with argument

        The method greet calls yield with the string "Alice" as argument, passing it to the block.
      2. Step 2: Evaluate the block execution

        The block receives "Alice" as name and prints "Hello, Alice!".
      3. Final Answer:

        Hello, Alice! -> Option B
      4. Quick Check:

        Yield passes "Alice" to block = C [OK]
      Hint: Yield passes arguments to block parameters [OK]
      Common Mistakes:
      • Ignoring the argument passed to yield
      • Assuming block is not called
      • Confusing variable names in block
      4. Identify the error in the following Ruby code:
      def run_block
        yield if block_given
      end
      
      run_block { puts "Block executed" }
      medium
      A. yield cannot be used without arguments
      B. Syntax error in method definition
      C. Block is not passed to the method
      D. Missing question mark (?) in block_given? method call

      Solution

      1. Step 1: Check usage of block_given?

        The method to check if a block is given is block_given?, note the question mark.
      2. Step 2: Identify the error in code

        The code uses block_given without the question mark (?), which causes a NameError because block_given is not a valid method.
      3. Final Answer:

        Missing question mark (?) in block_given? method call -> Option D
      4. Quick Check:

        Use block_given? with question mark [OK]
      Hint: Always use block_given? (with ?) [OK]
      Common Mistakes:
      • Forgetting question mark (?) on block_given?
      • Assuming yield needs arguments always
      • Not passing a block when expected
      5. Given the method below, what will be the output?
      def repeat(n)
        if block_given?
          n.times { |i| yield(i) }
        else
          puts "No block given"
        end
      end
      
      repeat(3) { |num| puts num * 2 }
      hard
      A. 0 1 2
      B. 1 2 3
      C. 0 2 4
      D. No block given

      Solution

      1. Step 1: Analyze the method behavior

        The method repeat checks if a block is given. Since a block is passed, it runs n.times and yields the index i to the block.
      2. Step 2: Evaluate the block execution

        The block multiplies each yielded number by 2 and prints it. For n=3, i goes 0,1,2, so outputs are 0, 2, 4.
      3. Final Answer:

        0 2 4 -> Option C
      4. Quick Check:

        Yield with times and block multiplies index = D [OK]
      Hint: Yield passes each index to block in times loop [OK]
      Common Mistakes:
      • Confusing index values starting at 1
      • Ignoring block_given? check
      • Expecting output without block
      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