Ruby Q & A


How to use ‘yield’ in Ruby?

In Ruby, the `yield` keyword is a powerful and flexible way to work with blocks of code. It allows you to pass control from a method to a block and back, enabling you to inject custom behavior into a method’s execution.

Here’s how you can use `yield` in Ruby:

  1. Defining a Method with `yield`:

   You can define a method that includes a `yield` statement within its body. When the method is called and encounters the `yield` keyword, it temporarily hands control over to the block of code passed to the method. Any code within the block will be executed.


   def greet

     puts "Hello,"


     puts "Goodbye!"


   greet { puts "Ruby" }


   When you call `greet` with a block, it will yield control to the block, resulting in the following output:







  1. Passing Parameters to the Block:

   You can also pass parameters to the block when using `yield`. These parameters can be utilized within the block to customize its behavior based on the context in which it is called.



   def greet(name)

     puts "Hello, #{name}"


     puts "Goodbye!"


   greet("Alice") { |name| puts "Nice to meet you, #{name}" }


   In this example, the block takes the `name` parameter passed by `yield` and incorporates it into its message.


  1. Handling Block Existence:

   You can check if a block was passed to a method using the `block_given?` method. This allows you to conditionally execute code based on the presence of a block.



   def with_block

     puts "Before block execution"

     yield if block_given?

     puts "After block execution"


   with_block { puts "Inside the block" }


   The code within the `yield if block_given?` statement will only execute if a block is passed to the `with_block` method.

Using `yield` in Ruby is a powerful technique for creating methods that can adapt their behavior based on custom code provided by the caller. It’s commonly used in various Ruby libraries and frameworks to create flexible and extensible APIs.

Previously at
Flag Argentina
time icon
Experienced software professional with a strong focus on Ruby. Over 10 years in software development, including B2B SaaS platforms and geolocation-based apps.