Bird
Raised Fist0
Rubyprogramming~5 mins

Proc composition in Ruby - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a Proc in Ruby?
A Proc is an object that holds a block of code which can be stored in a variable and called later. It allows you to treat code as data.
Click to reveal answer
beginner
How do you create a Proc in Ruby?
You can create a Proc using Proc.new { |args| ... } or the shorthand proc { |args| ... }.
Click to reveal answer
intermediate
What does Proc composition mean?
Proc composition means combining two or more Procs so that the output of one becomes the input of another, creating a chain of operations.
Click to reveal answer
intermediate
How can you compose two Procs in Ruby?
You can compose two Procs by creating a new Proc that calls the second Proc and then passes its result to the first Proc.
Click to reveal answer
intermediate
Example: Compose Proc p1 = proc { |x| x + 2 } and p2 = proc { |x| x * 3 }. What is the result of calling the composition with 4?
The composition applies p1 first: 4 + 2 = 6, then p2: 6 * 3 = 18. So the result is 18.
Click to reveal answer
What is the main purpose of a Proc in Ruby?
ATo create a variable
BTo store a block of code for later use
CTo define a class
DTo handle exceptions
How do you call a Proc stored in variable p?
Aexecute(p)
Bcall(p)
Cp()
Dp.call()
In Proc composition, what happens to the output of the first Proc?
AIt becomes input to the next Proc
BIt is ignored
CIt is printed automatically
DIt resets the program
Given p1 = proc { |x| x * 2 } and p2 = proc { |x| x + 3 }, what is the result of composing p2 after p1 and calling with 5?
A10
B16
C13
D8
Which Ruby method is used to create a Proc?
AProc.new
Bdef
Clambda
Dclass
Explain what Proc composition is and how it works in Ruby.
Think about how you can connect small steps to make a bigger step.
You got /3 concepts.
    Write a simple Ruby example that composes two Procs and explain the result.
    Use simple math operations like addition and multiplication.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the >> operator do when used with two Procs in Ruby?
      easy
      A. It merges two Procs into one that runs them both in parallel.
      B. It creates a new Proc that runs the first Proc, then passes its result to the second Proc.
      C. It swaps the order of execution of two Procs.
      D. It deletes the second Proc and keeps only the first.

      Solution

      1. Step 1: Understand Proc composition operator

        The >> operator chains two Procs so the output of the first becomes input of the second.
      2. Step 2: Explain the effect of chaining

        Calling the combined Proc runs the first, then passes its result to the second, producing a final result.
      3. Final Answer:

        It creates a new Proc that runs the first Proc, then passes its result to the second Proc. -> Option B
      4. Quick Check:

        Proc composition = chaining with >> [OK]
      Hint: Remember >> chains Procs passing output as input [OK]
      Common Mistakes:
      • Thinking >> runs Procs in parallel
      • Assuming >> swaps execution order
      • Believing >> deletes one Proc
      2. Which of the following is the correct syntax to compose two Procs p1 and p2 in Ruby?
      easy
      A. combined = p1 >> p2
      B. combined = p1 >>> p2
      C. combined = p1 << p2
      D. combined = p1 >> p2.call

      Solution

      1. Step 1: Recall correct Proc composition operator

        The operator to compose Procs is >>, which is written as >> but in Ruby code it is >> (two greater-than signs).
      2. Step 2: Check each option

        combined = p1 >> p2 uses >> correctly. combined = p1 >>> p2 uses three > which is invalid. combined = p1 << p2 uses << which is not for composition. combined = p1 >> p2.call calls p2 immediately, which is wrong.
      3. Final Answer:

        combined = p1 >> p2 -> Option A
      4. Quick Check:

        Proc composition syntax = p1 >> p2 [OK]
      Hint: Use exactly two > signs to compose Procs [OK]
      Common Mistakes:
      • Using >>> instead of >>
      • Using << instead of >>
      • Calling Proc instead of composing
      3. What is the output of this Ruby code?
      p1 = Proc.new { |x| x + 2 }
      p2 = Proc.new { |y| y * 3 }
      combined = p1 >> p2
      puts combined.call(4)
      medium
      A. 18
      B. 14
      C. 20
      D. 12

      Solution

      1. Step 1: Evaluate first Proc with input 4

        p1 adds 2 to input: 4 + 2 = 6.
      2. Step 2: Pass result 6 to second Proc

        p2 multiplies input by 3: 6 * 3 = 18.
      3. Final Answer:

        18 -> Option A
      4. Quick Check:

        (4 + 2) * 3 = 18 [OK]
      Hint: Apply first Proc, then second on result [OK]
      Common Mistakes:
      • Adding instead of multiplying in second Proc
      • Multiplying first, then adding
      • Confusing order of Procs
      4. Identify the error in this Ruby code that tries to compose two Procs:
      p1 = Proc.new { |x| x * 2 }
      p2 = Proc.new { |y| y + 5 }
      combined = p1 >> p2.call
      puts combined.call(3)
      medium
      A. Syntax error due to missing parentheses
      B. Using wrong operator for composition
      C. Missing block parameters in p1
      D. Calling p2 immediately instead of composing

      Solution

      1. Step 1: Check how p2 is used in composition

        The code uses p2.call which calls p2 immediately, returning a value, not a Proc.
      2. Step 2: Understand correct composition usage

        To compose, use p1 >> p2 without calling p2. Calling p2 breaks composition.
      3. Final Answer:

        Calling p2 immediately instead of composing -> Option D
      4. Quick Check:

        Compose Procs without calling them [OK]
      Hint: Do not call Procs when composing, just use >> [OK]
      Common Mistakes:
      • Calling Proc instead of composing
      • Using wrong operator like <<
      • Forgetting block parameters
      5. Given these Procs:
      p1 = Proc.new { |x| x.to_s }
      p2 = Proc.new { |s| s + "!" }
      p3 = Proc.new { |str| str.reverse }

      How do you compose them so that calling the combined Proc with 5 returns "5!"?
      hard
      A. combined = p3 >> p2 >> p1
      B. combined = p1 >> p2 >> p3
      C. combined = p1 >> p3 >> p2
      D. combined = p2 >> p1 >> p3

      Solution

      1. Step 1: Understand each Proc's effect

        p1 converts number to string, p2 adds "!", p3 reverses string.
      2. Step 2: Find composition order to get "5!"

        "5".reverse = "5", so p1 >> p3 >> p2 gives: "5" -> "5" -> "5!". But p1 >> p2 >> p3: "5" -> "5!" -> "!5". Only A produces "5!".
      3. Final Answer:

        combined = p1 >> p3 >> p2 -> Option C
      4. Quick Check:

        to_s, reverse, then add ! = "5!" [OK]
      Hint: Order Procs by desired transformations stepwise [OK]
      Common Mistakes:
      • Putting p2 before p3 changes output to "!5"
      • Reversing order causes errors on non-string
      • Ignoring effect of reverse on "5!"
      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