Bird
Raised Fist0
Rubyprogramming~20 mins

Send for calling methods dynamically in Ruby - Mini Project: Build & Apply

Choose your learning style10 modes available
Send for calling methods dynamically
📖 Scenario: Imagine you have a simple calculator that can perform different operations like addition, subtraction, multiplication, and division. You want to call these operations dynamically based on user input.
🎯 Goal: Build a Ruby program that uses send to call calculator methods dynamically.
📋 What You'll Learn
Create a class Calculator with methods add, subtract, multiply, and divide
Create an instance of Calculator called calc
Create a variable operation that stores the method name as a symbol
Use send on calc with operation and two numbers to get the result
Print the result
💡 Why This Matters
🌍 Real World
Dynamic method calling is useful when you want to choose actions at runtime, like in calculators, menus, or command handlers.
💼 Career
Understanding <code>send</code> helps in metaprogramming and building flexible Ruby applications that adapt to different inputs or commands.
Progress0 / 4 steps
1
Create the Calculator class with methods
Create a class called Calculator with four methods: add, subtract, multiply, and divide. Each method takes two parameters a and b and returns the result of the operation.
Ruby
Hint

Define each method inside the class with two parameters and return the calculation.

2
Create an instance and set operation variable
Create an instance of Calculator called calc. Then create a variable called operation and set it to the symbol :multiply.
Ruby
Hint

Use Calculator.new to create the instance and assign :multiply to operation.

3
Use send to call the method dynamically
Use send on the calc object with the operation variable and the numbers 6 and 7 as arguments. Store the result in a variable called result.
Ruby
Hint

Use calc.send(operation, 6, 7) to call the method stored in operation.

4
Print the result
Print the value of the variable result.
Ruby
Hint

Use puts result to display the output.

Practice

(1/5)
1. What does the Ruby method send do when used like obj.send(:method_name)?
easy
A. Calls the method named method_name on obj dynamically.
B. Creates a new method called method_name on obj.
C. Deletes the method named method_name from obj.
D. Returns the name of the method as a string.

Solution

  1. Step 1: Understand send usage

    The send method calls a method on an object using the method's name given as a symbol or string.
  2. Step 2: Analyze the example obj.send(:method_name)

    This calls the method named method_name on obj dynamically at runtime.
  3. Final Answer:

    Calls the method named method_name on obj dynamically. -> Option A
  4. Quick Check:

    send calls methods dynamically [OK]
Hint: Remember: send calls methods by name on objects [OK]
Common Mistakes:
  • Thinking send creates or deletes methods
  • Confusing send with method name retrieval
  • Assuming send returns method names as strings
2. Which of the following is the correct syntax to call a method named greet on object user using send?
easy
A. user.send(greet)
B. user.send('greet')()
C. user.send['greet']
D. user.send(:greet)

Solution

  1. Step 1: Recall send syntax

    The method name should be passed as a symbol or string without parentheses after send.
  2. Step 2: Check each option

    user.send(greet) misses quotes or symbol, causing error. user.send(:greet) correctly uses a symbol :greet. user.send('greet')() wrongly adds parentheses after send call. user.send['greet'] uses incorrect bracket syntax.
  3. Final Answer:

    user.send(:greet) -> Option D
  4. Quick Check:

    Use symbol for method name in send [OK]
Hint: Use colon before method name symbol in send [OK]
Common Mistakes:
  • Passing method name without quotes or colon
  • Adding parentheses after send call
  • Using brackets [] instead of parentheses ()
3. What is the output of this Ruby code?
class Person
  def greet(name)
    "Hello, #{name}!"
  end
end

p = Person.new
puts p.send(:greet, "Alice")
medium
A. Hello, Alice!
B. greet
C. NoMethodError
D. Hello, name!

Solution

  1. Step 1: Understand the method call with send

    The send method calls greet on p with argument "Alice".
  2. Step 2: Evaluate the method output

    The greet method returns "Hello, Alice!" which is printed by puts.
  3. Final Answer:

    Hello, Alice! -> Option A
  4. Quick Check:

    send calls greet with argument "Alice" [OK]
Hint: send passes arguments after method name [OK]
Common Mistakes:
  • Expecting method name string as output
  • Confusing argument passing with no arguments
  • Thinking send returns method object
4. Identify the error in this Ruby code snippet:
class Calculator
  def add(a, b)
    a + b
  end
end

calc = Calculator.new
calc.send(:add, 5)
medium
A. send cannot be used with arguments
B. Method add does not exist
C. Missing second argument for method add
D. Syntax error in method definition

Solution

  1. Step 1: Check method definition

    The method add requires two arguments: a and b.
  2. Step 2: Analyze the send call

    The send call provides only one argument (5), missing the second argument.
  3. Final Answer:

    Missing second argument for method add -> Option C
  4. Quick Check:

    Method arguments must match when using send [OK]
Hint: Match method arguments count when using send [OK]
Common Mistakes:
  • Passing fewer arguments than method requires
  • Assuming send works without correct arguments
  • Thinking send changes method signature
5. You want to call different arithmetic methods (add, subtract, multiply) on a Calculator object dynamically based on user input stored in operation. Which Ruby code correctly uses send to achieve this?
class Calculator
  def add(a, b); a + b; end
  def subtract(a, b); a - b; end
  def multiply(a, b); a * b; end
end

calc = Calculator.new
operation = :multiply
# Fill in the blank below to call the method dynamically
result = ???
puts result
hard
A. calc.send(:operation, 4, 5)
B. calc.send(operation, 4, 5)
C. calc.send('operation', 4, 5)
D. calc.send(operation())

Solution

  1. Step 1: Understand dynamic method calling

    The variable operation holds the symbol of the method to call.
  2. Step 2: Use send with variable method name and arguments

    Passing operation as the first argument to send calls the correct method with arguments 4 and 5.
  3. Final Answer:

    calc.send(operation, 4, 5) -> Option B
  4. Quick Check:

    send uses variable method names with arguments [OK]
Hint: Pass method name variable and args directly to send [OK]
Common Mistakes:
  • Passing method name as string literal instead of variable
  • Adding parentheses after variable name incorrectly
  • Using symbol literal instead of variable for method name
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