最近在学习国外大佬的Ruby教程,我总结了一下知识点,方便小伙伴们复习。
类的继承
类可以有祖先,就像家谱一样。例如,String 类的祖先链是:Kernel -> Object -> Comparable -> String
Fixnum 类的祖先链是:
Kernel -> Object -> Comparable -> Numeric -> Precision -> Integer -> Fixnum
方法查找
当你在一个对象上调用方法时,会从该对象所属的类开始查找,如果找不到,会依次向上查找其祖先类,直到找到方法或引发 NoMethodError 错误。is_a? 方法
is_a? 方法可以检查对象是否属于某个类或其祖先类。例如:14.is_a?(Numeric) #=> true
14.is_a?(Object) #=> true
14.is_a?(String) #=> false
创建自定义类
你可以创建自己的类:class CustomClass
end
创建类的实例:
var = CustomClass.new
添加实例方法:
class CustomClass
def say_hello
print "Hello!"
end
end
var.say_hello # 打印 "Hello!"
类方法
类方法是定义在类本身上的方法,而不是实例上的方法:class CustomClass
def self.say_hello
print "Hello!"
end
end
CustomClass.say_hello # 打印 "Hello!"
构造函数
构造函数 initialize 在创建对象时被调用:class CustomClass
def initialize
p "This object was just created!"
end
end
var = CustomClass.new # 打印 "This object was just created!"
构造函数可以接受参数:
class CustomClass
def initialize(string)
print string
end
end
var = CustomClass.new("Hello!") # 打印 "Hello!"
添加和覆盖方法
你可以随时向类添加或覆盖方法:class CustomClass
def say_hello
print "Hello!"
end
end
CustomClass.new.say_hello # 打印 "Hello!"
class CustomClass
def say_hello
print "Hi!"
end
end
CustomClass.new.say_hello # 打印 "Hi!"
继承
新类默认继承自 Object。你可以通过 < 指定继承其他类:class One
def say_hello
print "Hello!"
end
end
class Two < One
end
Two.new.say_hello # 打印 "Hello!"
super 关键字
super 关键字用于调用超类中的同名方法:class One
def hi
p "Hi!"
end
end
class Two < One
def hi
p "Hello!"
super
end
end
Two.new.hi # 打印 "Hello!" 然后打印 "Hi!"