builtins/type_introspection.rb
tests/_examples/builtins/type_introspection.rb in the metorex repository.
# Type introspection demonstration
# is_a? checks
puts 42.is_a?(Integer)
puts 42.is_a?(String)
puts "hello".is_a?(String)
puts 3.14.is_a?(Float)
arr_check = [1, 2]
puts arr_check.is_a?(Array)
# kind_of? is an alias
puts 42.kind_of?(Integer)
# is_a? checks inheritance
puts 42.is_a?(Object)
# superclass
puts Integer.superclass.name
puts Object.superclass
# ancestors
puts Integer.ancestors.length
# Custom class introspection
class Animal
def initialize(name)
@name = name
end
end
class Dog < Animal
def initialize(name, breed)
super(name)
@breed = breed
end
end
d = Dog.new("Rex", "Labrador")
puts d.is_a?(Dog)
puts d.is_a?(Animal)
puts Dog.superclass.name
# instance_variables
puts d.instance_variables.length
# instance_variable_get
puts d.instance_variable_get("@name")
# dup creates independent copy
arr = [1, 2, 3]
arr2 = arr.dup
arr2.push(4)
puts arr.length
puts arr2.length
Output:
true
false
true
true
true
true
true
Numeric
BasicObject
6
true
true
Animal
2
Rex
3
4