Bird
Raised Fist0
Rubyprogramming~10 mins

Type checking with .class and .is_a? in Ruby - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Type checking with .class and .is_a?
Start with an object
↓
Check object.class
↓
Compare with a class
↓
Action if exact class
+--No-->↓
Check object.is_a?(Class)
↓
Action if object is instance or subclass
↓
Action if not matching type
↓
End
We first check the exact class of an object using .class, then check if it is an instance of a class or its subclass using .is_a?.
Execution Sample
Ruby
num = 5
puts num.class
puts num.is_a?(Integer)
puts num.is_a?(String)
This code shows how to check the exact class and type membership of a number.
Execution Table
StepExpressionEvaluationResultExplanation
1num = 5Assign 5 to numnum = 5num now holds the integer 5
2num.classCheck exact class of numIntegernum is exactly an Integer
3num.is_a?(Integer)Check if num is Integer or subclasstruenum is an Integer, so true
4num.is_a?(String)Check if num is String or subclassfalsenum is not a String, so false
💡 All checks done, program ends
Variable Tracker
VariableStartAfter 1After 2After 3Final
numundefined5555
Key Moments - 2 Insights
Why does num.class == Integer return true but num.is_a?(Integer) can also be true for subclasses?
num.class returns the exact class, so it must match exactly. num.is_a?(Integer) returns true if num is an instance of Integer or any subclass, so it is more flexible (see execution_table rows 2 and 3).
Can .is_a? return false even if .class matches?
No, if .class matches exactly, .is_a? will always return true because the object is an instance of that class (see execution_table rows 2 and 3).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the result of num.class at step 2?
Atrue
BString
CInteger
Dfalse
💡 Hint
Check the 'Result' column in execution_table row 2
At which step does num.is_a?(Integer) return true?
AStep 3
BStep 2
CStep 4
DNone
💡 Hint
Look at the 'Expression' and 'Result' columns in execution_table row 3
If num was a String, what would num.is_a?(Integer) return?
Atrue
Bfalse
CInteger
DError
💡 Hint
Refer to execution_table row 4 where num is not a String and returns false
Concept Snapshot
Type checking in Ruby:
- Use obj.class to get exact class
- Use obj.is_a?(Class) to check if obj is instance or subclass
- .class == Class checks exact match
- .is_a? returns true for subclasses too
- Useful for flexible type checks
Full Transcript
This visual execution shows how Ruby checks types using .class and .is_a?. First, an object num is assigned the value 5. Checking num.class returns Integer because 5 is exactly an Integer. Using num.is_a?(Integer) returns true because num is an instance of Integer or its subclass. Checking num.is_a?(String) returns false because num is not a String. The difference is .class checks exact class, while .is_a? checks class or subclass membership. This helps decide how to handle objects based on their type.

Practice

(1/5)
1. What does the .class method return when called on an object in Ruby?
easy
A. Whether the object is a kind of a class
B. The exact type (class) of the object
C. The parent class of the object
D. A boolean indicating if the object is a class

Solution

  1. Step 1: Understand what .class does

    The .class method returns the exact class of the object it is called on.
  2. Step 2: Compare with other options

    Options A, C, and D describe behaviors of other methods or incorrect meanings.
  3. Final Answer:

    The exact type (class) of the object -> Option B
  4. Quick Check:

    .class returns exact type [OK]
Hint: Remember: .class gives exact type, not inheritance [OK]
Common Mistakes:
  • Confusing .class with .is_a?
  • Thinking .class returns boolean
  • Assuming .class returns parent class
2. Which of the following is the correct syntax to check if variable x is an instance of the Integer class using .is_a??
easy
A. x.is_a?(Integer)
B. x.is_a(Integer)
C. x.is_a<Integer>
D. x.is_a? Integer

Solution

  1. Step 1: Recall the syntax of .is_a?

    The method .is_a? requires a class argument inside parentheses, like .is_a?(ClassName).
  2. Step 2: Check each option

    x.is_a?(Integer) uses correct syntax with parentheses and question mark. Options A, B, and D have syntax errors or missing parentheses.
  3. Final Answer:

    x.is_a?(Integer) -> Option A
  4. Quick Check:

    Use parentheses with .is_a? [OK]
Hint: Always use parentheses with .is_a? method [OK]
Common Mistakes:
  • Omitting parentheses after .is_a?
  • Using angle brackets instead of parentheses
  • Leaving out the question mark
3. What will be the output of the following Ruby code?
class Animal; end
class Dog < Animal; end

dog = Dog.new
puts dog.class
puts dog.is_a?(Animal)
medium
A. Dog true
B. Animal true
C. Dog false
D. Animal false

Solution

  1. Step 1: Understand dog.class

    The dog object is an instance of Dog, so dog.class returns Dog.
  2. Step 2: Understand dog.is_a?(Animal)

    Since Dog inherits from Animal, dog.is_a?(Animal) returns true.
  3. Final Answer:

    Dog true -> Option A
  4. Quick Check:

    .class exact type, .is_a? checks inheritance [OK]
Hint: Remember: .class exact, .is_a? true for subclasses too [OK]
Common Mistakes:
  • Thinking .class returns parent class
  • Assuming .is_a? false for subclasses
  • Confusing output order
4. Identify the error in the following Ruby code snippet:
num = 10
if num.is_a?(Integer)
  puts "Number is integer"
else
  puts "Number is not integer"
end
medium
A. Syntax error in if statement
B. Missing parentheses in is_a? call
C. No error, code runs correctly
D. Incorrect class name Integer

Solution

  1. Step 1: Check is_a? usage

    The method .is_a? is correctly called with parentheses and the class Integer.
  2. Step 2: Verify syntax correctness

    The if statement and puts calls are syntactically correct.
  3. Final Answer:

    No error, code runs correctly -> Option C
  4. Quick Check:

    Correct syntax and usage means no error [OK]
Hint: Check parentheses and class names carefully [OK]
Common Mistakes:
  • Removing parentheses from is_a?
  • Using wrong class name like 'int'
  • Misplacing if-end keywords
5. Given the following code, which option correctly filters only strings from the mixed array using .is_a??
items = ["apple", 42, :symbol, "banana", 3.14]
strings = items.select { |item| ??? }
hard
A. item.class != String
B. item.class == String
C. item.is_a?(Integer)
D. item.is_a?(String)

Solution

  1. Step 1: Understand filtering with .is_a?

    We want to select only elements that are strings, so we check if each item is a kind of String.
  2. Step 2: Compare options

    item.is_a?(String) uses .is_a?(String) which returns true for strings. item.class == String uses .class == String which also works but is less flexible if subclasses exist. Options C and D filter integers or non-strings, which is incorrect.
  3. Final Answer:

    item.is_a?(String) -> Option D
  4. Quick Check:

    Use .is_a?(String) to filter strings [OK]
Hint: Use .is_a?(String) to include subclasses too [OK]
Common Mistakes:
  • Using .class == String and missing subclasses
  • Filtering wrong types by mistake
  • Forgetting question mark in .is_a?
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