Bird
Raised Fist0
Rubyprogramming~5 mins

Method objects with method() in Ruby - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Method objects with method()
O(n)
Understanding Time Complexity

We want to understand how the time needed to run code changes when we use method objects created by method() in Ruby.

Specifically, we ask: how does calling a method object repeatedly affect the total work done?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


class Greeter
  def greet(name)
    "Hello, #{name}!"
  end
end

g = Greeter.new
m = g.method(:greet)

names = ["Alice", "Bob", "Carol", "Dave"]
names.each do |n|
  puts m.call(n)
end
    

This code creates a method object from an instance method and calls it for each name in a list.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Calling the method object m.call(n) inside the loop.
  • How many times: Once for each element in the names array.
How Execution Grows With Input

Each time we add more names, the number of method calls grows the same way.

Input Size (n)Approx. Operations
1010 method calls
100100 method calls
10001000 method calls

Pattern observation: The total work grows directly with the number of names.

Final Time Complexity

Time Complexity: O(n)

This means the time to run the code grows in a straight line as the list of names gets bigger.

Common Mistake

[X] Wrong: "Using a method object makes calling the method slower and more complex."

[OK] Correct: Creating a method object is a one-time setup, and calling it inside a loop is just like calling a normal method each time, so the overall time grows linearly with input size.

Interview Connect

Understanding how method objects behave helps you explain how Ruby handles method calls and objects, showing you know both language features and performance basics.

Self-Check

What if we replaced the array iteration with recursion calling the method object? How would the time complexity change?

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