Bird
Raised Fist0
Rubyprogramming~20 mins

Method objects with method() in Ruby - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Method Object Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of calling a method object

What is the output of this Ruby code?

Ruby
class Greeter
  def hello
    "Hello, world!"
  end
end

g = Greeter.new
m = g.method(:hello)
puts m.call
AHello, world!
BNoMethodError
Cnil
DArgumentError
Attempts:
2 left
💡 Hint

Remember that method(:name) returns a method object that you can call.

🧠 Conceptual
intermediate
2:00remaining
Understanding method objects and binding

Which statement about Ruby method objects created by method() is true?

AThey automatically convert to procs when assigned to variables.
BThey cannot be called more than once.
CThey are bound to the object they were created from and remember its state.
DThey are unbound and can be called on any object of the same class.
Attempts:
2 left
💡 Hint

Think about what happens when you call method(:name) on an object.

🔧 Debug
advanced
2:00remaining
Identify the error when calling an unbound method

What error does this Ruby code produce?

Ruby
class Person
  def greet
    "Hi!"
  end
end

m = Person.instance_method(:greet)
m.call
AArgumentError
BTypeError
CNameError
DUnboundMethodError
Attempts:
2 left
💡 Hint

Consider what instance_method returns and how it differs from method.

📝 Syntax
advanced
2:00remaining
Correct way to convert a method object to a proc

Which option correctly converts a method object to a proc and calls it?

Ruby
class Calculator
  def double(x)
    x * 2
  end
end

calc = Calculator.new
m = calc.method(:double)
# call the method object as a proc with argument 5
Ap = m.to_proc(5); puts p.call
Bp = m.proc; puts p.call(5)
Cp = m.to_proc; puts p.call
Dp = m.to_proc; puts p.call(5)
Attempts:
2 left
💡 Hint

Check the correct method name to convert a method object to a proc and how to call it with arguments.

🚀 Application
expert
3:00remaining
Using method objects to implement a callback system

You want to store multiple method objects from different instances and call them later. Which code snippet correctly stores and calls these method objects?

Ruby
class Worker
  def initialize(name)
    @name = name
  end
  def work
    "#{@name} is working"
  end
end

w1 = Worker.new("Alice")
w2 = Worker.new("Bob")
callbacks = []
# store method objects from w1 and w2
callbacks << w1.method(:work)
callbacks << w2.method(:work)

# call all stored callbacks and collect results
results = callbacks.map { |m| m.call }
puts results
A["is working", "is working"]
B["Alice is working", "Bob is working"]
C["Alice", "Bob"]
DRuntimeError
Attempts:
2 left
💡 Hint

Think about how method objects keep their binding to the original instance.

Practice

(1/5)
1. What does the Ruby expression obj.method(:foo) return?
easy
A. A Method object representing the method foo of obj
B. The result of calling foo on obj
C. A symbol :foo
D. An error because method is not a valid method

Solution

  1. Step 1: Understand method usage

    The method method on an object returns a Method object representing the named method.
  2. Step 2: Identify the return type

    Calling obj.method(:foo) returns a Method object, not the method's result or a symbol.
  3. Final Answer:

    A Method object representing the method foo of obj -> Option A
  4. Quick Check:

    obj.method(:foo) returns Method object [OK]
Hint: Remember: method returns a Method object, not the call result [OK]
Common Mistakes:
  • Thinking it calls the method immediately
  • Confusing with symbol :foo
  • Assuming it returns a string or error
2. Which of the following is the correct syntax to get a Method object for the method greet on object person?
easy
A. person.send(:greet)
B. person.method[b greet]
C. person.method(greet)
D. person.method(:greet)

Solution

  1. Step 1: Check argument type for method

    The method method expects a symbol representing the method name.
  2. Step 2: Validate options

    person.method(:greet) uses a symbol :greet, which is correct. person.send(:greet) calls the method directly, returning its result instead of a Method object. person.method(greet) passes an undefined variable greet, causing error. person.method[b greet] uses brackets, which is invalid syntax.
  3. Final Answer:

    person.method(:greet) -> Option D
  4. Quick Check:

    Use symbol argument with method [OK]
Hint: Use a symbol like :greet inside method() [OK]
Common Mistakes:
  • Confusing method() with send()
  • Using brackets instead of parentheses
  • Passing undefined variable instead of symbol
3. What is the output of the following Ruby code?
class Calculator
  def add(x, y)
    x + y
  end
end
calc = Calculator.new
adder = calc.method(:add)
puts adder.call(5, 7)
medium
A. 5 7
B. 12
C. add
D. NoMethodError

Solution

  1. Step 1: Understand method object creation

    The method(:add) returns a Method object for add on calc.
  2. Step 2: Calling the Method object

    Calling adder.call(5, 7) executes add(5, 7), which returns 12.
  3. Final Answer:

    12 -> Option B
  4. Quick Check:

    Method object call returns sum 12 [OK]
Hint: Use call on Method object to run method with arguments [OK]
Common Mistakes:
  • Expecting method name or arguments printed
  • Confusing output with error
  • Not using call to invoke method
4. Identify the error in this Ruby code snippet:
class Person
  def name
    "Alice"
  end
end
p = Person.new
m = p.method(name)
m.call
medium
A. Missing quotes around method name in method(name)
B. Cannot call method on an object
C. Method name does not exist
D. Using call on Method object is invalid

Solution

  1. Step 1: Check argument to method

    The argument name is used as a variable, but it should be a symbol or string representing the method name.
  2. Step 2: Correct usage

    It should be p.method(:name) or p.method('name') to get the Method object.
  3. Final Answer:

    Missing quotes around method name in method(name) -> Option A
  4. Quick Check:

    Method name must be symbol or string [OK]
Hint: Always pass method name as symbol or string to method() [OK]
Common Mistakes:
  • Passing bare method name without quotes or colon
  • Thinking method is invalid on objects
  • Confusing call usage
5. Given the following code, what will be the output?
class Greeter
  def initialize(name)
    @name = name
  end
  def greet
    "Hello, #{@name}!"
  end
end

g1 = Greeter.new("Bob")
g2 = Greeter.new("Sue")
m1 = g1.method(:greet)
m2 = g2.method(:greet)

puts m1.call
puts m2.call
hard
A. Hello, Sue!\nHello, Sue!
B. Hello, Bob!\nHello, Bob!
C. Hello, Bob!\nHello, Sue!
D. Error: undefined method greet

Solution

  1. Step 1: Understand instance variables and method objects

    Each Greeter instance stores its own @name. The method(:greet) returns a Method object bound to that instance.
  2. Step 2: Calling Method objects

    Calling m1.call runs greet on g1, printing "Hello, Bob!". Similarly, m2.call prints "Hello, Sue!".
  3. Final Answer:

    Hello, Bob! Hello, Sue! -> Option C
  4. Quick Check:

    Method objects keep instance context [OK]
Hint: Method objects remember their object, so output matches instance data [OK]
Common Mistakes:
  • Assuming method objects lose instance context
  • Expecting same output for both calls
  • Confusing method object with class method
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