Bird
Raised Fist0
Rubyprogramming~10 mins

Proc creation and call in Ruby - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Proc creation and call
Create Proc object
↓
Store Proc in variable
↓
Call Proc using .call
↓
Execute Proc code block
↓
Return result from Proc
↓
Use or print result
This flow shows how a Proc is created, stored, called, and how its result is used.
Execution Sample
Ruby
my_proc = Proc.new { |x| x * 2 }
result = my_proc.call(5)
puts result
Creates a Proc that doubles a number, calls it with 5, and prints the result.
Execution Table
StepActionEvaluationResult
1Create Proc with block { |x| x * 2 }Proc object createdmy_proc holds Proc
2Call my_proc.call(5)Executes block with x=5Returns 10
3Assign result = 10Store return valueresult = 10
4puts resultPrints value to outputOutput: 10
💡 Program ends after printing 10
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
my_procnilProc objectProc objectProc objectProc object
resultnilnil101010
Key Moments - 2 Insights
Why do we use .call to run the Proc instead of just writing its name?
The Proc object is like a box holding code. To run the code inside, we must use .call as shown in step 2 of the execution_table.
What does the block parameter |x| mean inside the Proc?
It is a placeholder for the input value given when calling the Proc, like 5 in step 2. The Proc uses x to do calculations.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of result after step 3?
A5
BProc object
C10
Dnil
💡 Hint
Check the 'result' variable in variable_tracker after step 3.
At which step is the Proc object created and stored in my_proc?
AStep 1
BStep 2
CStep 3
DStep 4
💡 Hint
Look at the first row in execution_table where the Proc is created.
If we change the call to my_proc.call(3), what will be the output at step 4?
A10
B6
C3
DError
💡 Hint
The Proc doubles the input, so check the calculation in step 2.
Concept Snapshot
Proc creation: my_proc = Proc.new { |x| code }
Call Proc: my_proc.call(args)
Proc holds code block to run later
.call runs the code with given input
Returns result from block
Full Transcript
This example shows how to create a Proc in Ruby using Proc.new with a block that takes one input x and returns x times 2. The Proc is stored in the variable my_proc. When we call my_proc.call(5), it runs the block with x=5 and returns 10. We store this in result and print it with puts, which outputs 10. The key steps are creating the Proc, calling it with an argument, and using the returned value.

Practice

(1/5)
1. What does a Proc in Ruby do?
easy
A. Stores a block of code to run later
B. Creates a new variable
C. Defines a class
D. Starts a loop

Solution

  1. Step 1: Understand what a Proc is and match description

    A Proc is a way to save some code to run later, like a recipe you keep for cooking. Only Stores a block of code to run later describes storing code to run later, which matches what a Proc does.
  2. Final Answer:

    Stores a block of code to run later -> Option A
  3. Quick Check:

    Proc = stored code block [OK]
Hint: Proc saves code to run later, like a saved recipe [OK]
Common Mistakes:
  • Thinking Proc creates variables
  • Confusing Proc with class definition
  • Assuming Proc starts loops automatically
2. Which of the following is the correct way to create a Proc in Ruby?
easy
A. my_proc = Proc.new { |x| x * 2 }
B. my_proc = new Proc { |x| x * 2 }
C. my_proc = Proc.create { |x| x * 2 }
D. my_proc = Proc.call { |x| x * 2 }

Solution

  1. Step 1: Recall Proc creation syntax and check options

    In Ruby, you create a Proc using Proc.new or proc with a block. Only my_proc = Proc.new { |x| x * 2 } uses the correct syntax Proc.new { |x| x * 2 }. Others use invalid methods like new Proc, Proc.create, or Proc.call.
  2. Final Answer:

    my_proc = Proc.new { |x| x * 2 } -> Option A
  3. Quick Check:

    Proc.new + block = correct Proc creation [OK]
Hint: Use Proc.new or proc with a block to create a Proc [OK]
Common Mistakes:
  • Using 'new Proc' instead of 'Proc.new'
  • Trying to call Proc.create or Proc.call to create
  • Missing the block braces {}
3. What is the output of this Ruby code?
my_proc = proc { |x| x + 3 }
puts my_proc.call(4)
medium
A. 4
B. Error
C. 3
D. 7

Solution

  1. Step 1: Trace the Proc definition and execution

    The Proc adds 3 to the input number: x + 3. Calling my_proc.call(4) computes 4 + 3 = 7.
  2. Final Answer:

    7 -> Option D
  3. Quick Check:

    4 + 3 = 7 [OK]
Hint: Proc.call runs code with given argument [OK]
Common Mistakes:
  • Confusing Proc.call with Proc.new
  • Forgetting to pass argument to call
  • Expecting output without call
4. Identify the error in this code snippet:
my_proc = Proc.new { |x| x * 2 }
puts my_proc.call
medium
A. Proc.new syntax is incorrect
B. Missing argument when calling the Proc
C. Cannot call Proc with call method
D. Block should not have parameters

Solution

  1. Step 1: Analyze Proc definition and call for errors

    The Proc expects one argument x to multiply by 2. The call is made without any argument, which causes an error because x is missing.
  2. Final Answer:

    Missing argument when calling the Proc -> Option B
  3. Quick Check:

    Proc needs argument when called [OK]
Hint: Always pass required arguments when calling a Proc [OK]
Common Mistakes:
  • Calling Proc without required arguments
  • Thinking Proc.new syntax is wrong
  • Believing call method is invalid
5. Given this code, what will be the output?
def create_proc
  Proc.new { |x| x.nil? ? 'No value' : x * 10 }
end

my_proc = create_proc
puts my_proc.call(nil)
puts my_proc.call(5)
hard
A. nil\n50
B. Error\n50
C. No value\n50
D. No value\n5

Solution

  1. Step 1: Analyze the Proc logic and trace both calls

    The Proc checks if x is nil; if yes, returns 'No value', else returns x * 10. Calling with nil returns 'No value'. Calling with 5 returns 5 * 10 = 50.
  2. Final Answer:

    No value\n50 -> Option C
  3. Quick Check:

    nil -> 'No value', 5 -> 50 [OK]
Hint: Proc can handle nil with conditional inside block [OK]
Common Mistakes:
  • Expecting error when passing nil
  • Forgetting ternary condition inside Proc
  • Assuming multiplication by 10 applies to nil
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