Bird
Raised Fist0
Rubyprogramming~20 mins

Instance_variable_get and set in Ruby - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Instance Variable Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Ruby code using instance_variable_get?
Consider the following Ruby class and code. What will be printed when this code runs?
Ruby
class Person
  def initialize(name)
    @name = name
  end
end

p = Person.new("Alice")
puts p.instance_variable_get(:@name)
Anil
BError: undefined method `instance_variable_get' for Person
CAlice
D@name
Attempts:
2 left
💡 Hint
instance_variable_get reads the value of an instance variable by its name symbol.
❓ Predict Output
intermediate
2:00remaining
What does this code print after using instance_variable_set?
Look at this Ruby code. What will be the output?
Ruby
class Car
  def initialize
    @speed = 0
  end
end

car = Car.new
car.instance_variable_set(:@speed, 100)
puts car.instance_variable_get(:@speed)
A100
B0
Cnil
DError: undefined method `instance_variable_set' for Car
Attempts:
2 left
💡 Hint
instance_variable_set changes the value of an instance variable.
❓ Predict Output
advanced
2:00remaining
What error does this code raise?
What error will this Ruby code produce when run?
Ruby
class Box
  def initialize
    @content = "secret"
  end
end

box = Box.new
box.instance_variable_get("content")
ANo error, returns nil
BNameError
CArgumentError
DTypeError
Attempts:
2 left
💡 Hint
instance_variable_get expects a symbol or string starting with @.
❓ Predict Output
advanced
2:00remaining
What is the output of this code using instance_variable_set dynamically?
What will this Ruby code print?
Ruby
class User
  def initialize
    @data = {}
  end
  def set_var(name, value)
    instance_variable_set("@" + name.to_s, value)
  end
  def get_var(name)
    instance_variable_get("@" + name.to_s)
  end
end

user = User.new
user.set_var(:age, 30)
puts user.get_var(:age)
Aage
B30
Cnil
DError: undefined method `set_var' for User
Attempts:
2 left
💡 Hint
instance_variable_set and get can use string names with '@' prefix.
🧠 Conceptual
expert
2:00remaining
How many instance variables does this object have after running the code?
After running this Ruby code, how many instance variables does the object 'obj' have?
Ruby
class Sample
  def initialize
    @a = 1
    @b = 2
  end
end

obj = Sample.new
obj.instance_variable_set(:@c, 3)
obj.instance_variable_set(:@d, 4)
obj.instance_variable_get(:@a)
obj.instance_variable_get(:@b)
A4
B2
C3
D5
Attempts:
2 left
💡 Hint
instance_variable_set adds new instance variables if they don't exist.

Practice

(1/5)
1. What does the Ruby method instance_variable_get do?
easy
A. It reads the value of an instance variable by its name.
B. It deletes an instance variable from an object.
C. It creates a new instance variable with a given name.
D. It lists all instance variables of an object.

Solution

  1. Step 1: Understand the method purpose

    instance_variable_get is used to access the value of an instance variable by passing its name as a symbol or string.
  2. Step 2: Compare with other options

    It does not delete, create, or list variables; it only reads the value.
  3. Final Answer:

    It reads the value of an instance variable by its name. -> Option A
  4. Quick Check:

    instance_variable_get reads variable value [OK]
Hint: Remember: get = read value of variable [OK]
Common Mistakes:
  • Confusing get with set (changing value)
  • Thinking it deletes variables
  • Assuming it lists all variables
2. Which of the following is the correct syntax to set an instance variable @name to "Alice" using instance_variable_set?
easy
A. object.instance_variable_set(:nam, "Alice")
B. object.instance_variable_set("nam", "Alice")
C. object.instance_variable_set(@name, "Alice")
D. object.instance_variable_set(:@name, "Alice")

Solution

  1. Step 1: Understand the argument format

    The first argument to instance_variable_set must be the instance variable name as a symbol or string, including the '@' prefix.
  2. Step 2: Check each option

    A: object.instance_variable_set(:nam, "Alice") misses '@'. B: object.instance_variable_set("nam", "Alice") misses '@'. C: passes a variable instead of symbol/string. D: uses :@name symbol correctly.
  3. Final Answer:

    object.instance_variable_set(:@name, "Alice") -> Option D
  4. Quick Check:

    Use symbol with '@' prefix for setting [OK]
Hint: Use symbol with '@' prefix to set variable [OK]
Common Mistakes:
  • Omitting '@' in variable name
  • Passing variable instead of symbol/string
  • Using string without '@' prefix
3. What will be the output of this Ruby code?
class Person
  def initialize(name)
    @name = name
  end
end

p = Person.new("Bob")
puts p.instance_variable_get(:@name)
medium
A. Bob
B. nil
C. @name
D. Error

Solution

  1. Step 1: Understand instance variable initialization

    The @name variable is set to "Bob" in the constructor.
  2. Step 2: Use instance_variable_get to read value

    Calling instance_variable_get(:@name) returns the value "Bob" stored in @name.
  3. Final Answer:

    Bob -> Option A
  4. Quick Check:

    instance_variable_get returns stored value [OK]
Hint: instance_variable_get returns actual stored value [OK]
Common Mistakes:
  • Expecting variable name instead of value
  • Confusing with nil if variable not set
  • Thinking it raises error if variable exists
4. Identify the issue in this Ruby code snippet:
class Car
  def initialize
    @speed = 0
  end

  def set_speed(value)
    instance_variable_set(:speed, value)
  end
end

car = Car.new
car.set_speed(50)
puts car.instance_variable_get(:@speed)
medium
A. The variable @speed is not initialized.
B. Cannot call instance_variable_set inside a method.
C. Missing '@' in instance_variable_set argument name.
D. instance_variable_get should use string, not symbol.

Solution

  1. Step 1: Check instance_variable_set argument

    The argument to instance_variable_set must include '@' prefix to identify the instance variable.
  2. Step 2: Identify the error

    Here, :speed is missing '@', so Ruby will not find the variable and will create a new one without '@', causing unexpected behavior.
  3. Final Answer:

    Missing '@' in instance_variable_set argument name. -> Option C
  4. Quick Check:

    Always include '@' in variable name for instance_variable_set [OK]
Hint: Always prefix variable name with '@' in set/get methods [OK]
Common Mistakes:
  • Omitting '@' in variable name
  • Thinking instance_variable_set can't be used in methods
  • Confusing symbol and string usage
5. Given a class Box with private instance variable @content, how can you change its value to "Books" from outside the class using instance_variable_set?
hard
A. box.instance_variable_set(:conten, "Books")
B. box.instance_variable_set(:@content, "Books")
C. box.@content = "Books"
D. box.set_content("Books")

Solution

  1. Step 1: Understand private variable access

    Private instance variables cannot be accessed or changed directly from outside the class using normal assignment.
  2. Step 2: Use instance_variable_set with correct name

    Using instance_variable_set with the symbol including '@' allows changing the private variable from outside.
  3. Step 3: Check options

    box.instance_variable_set(:@content, "Books") correctly uses :@content. box.instance_variable_set(:conten, "Books") misses '@', box.@content = "Books" is invalid syntax, box.set_content("Books") assumes a setter method which may not exist.
  4. Final Answer:

    box.instance_variable_set(:@content, "Books") -> Option B
  5. Quick Check:

    Use instance_variable_set with '@' to change private vars [OK]
Hint: Use '@' prefix symbol to set private variables externally [OK]
Common Mistakes:
  • Omitting '@' in variable name
  • Trying direct assignment to private variable
  • Assuming setter method exists
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