📅  最后修改于: 2023-12-03 15:07:48.874000             🧑  作者: Mango
在 Ruby 中,我们可以使用 include
和 extend
来在一个类中使用模块。这两个方法的功能类似,但是用途不同。
include
include
方法将模块的方法和常量加入到类中的实例方法中,实例化的对象可以使用模块中的方法和常量。例如:
module Greetings
def hello
puts "Hello!"
end
end
class Person
include Greetings
end
alice = Person.new
alice.hello # 输出 "Hello!"
在上面的例子中,include Greetings
将 Greetings
模块中的 hello
方法引入了 Person
类中。实例化的对象 alice
可以调用 hello
方法。
extend
extend
方法将模块的方法和常量加入到类中的类方法中,即类的单个实例可以使用模块中的方法和常量。例如:
module Countable
def count
puts "#{self} count: 1"
end
end
class Apple
extend Countable
end
Apple.count # 输出 "Apple count: 1"
在上面的例子中,extend Countable
将 Countable
模块中的 count
方法引入了 Apple
类中。调用 Apple.count
方法时,输出了 Apple count: 1
。
include
vs extend
总的来说,include
适用于将模块的方法和常量引入实例方法中,extend
适用于将模块的方法和常量引入类方法中。我们还可以同时使用这两个方法来扩展类的功能。
module Greetings
def hello
puts "Hello!"
end
end
module Countable
def count
puts "#{self} count: 1"
end
end
class Person
include Greetings
extend Countable
end
alice = Person.new
alice.hello # 输出 "Hello!"
Person.count # 输出 "Person count: 1"
在上面的例子中,我们同时使用了 include
和 extend
来使用 Greetings
模块和 Countable
模块中的方法和常量。实例化的对象 alice
可以调用 hello
方法,Person
类调用 count
方法时,输出了 Person count: 1
。
总的来说,我们可以根据实际需求使用 include
和 extend
方法来扩展类的功能。