include
和extend
是兩種不同的方式來引入模組(module)的。它們有不同的作用和影響:
include
:
include
時,模組中的方法會變成實例方法,可以被類別的實例(物件)調用。include
,該類別的實例將能夠使用模組中的方法。include
通常用於將共享的功能添加到多個類別中,以便它們可以共享相同的方法。module MyModule
def hello
puts "Hello from MyModule!"
end
end
class MyClass
include MyModule
end
obj = MyClass.new
obj.hello # 这里可以调用MyModule中的方法
在這個例子中,MyClass類別包含了MyModule模組,因此它的實例可以呼叫MyModule中的hello方法。
extend
:
extend
時,模組中的方法會變成類別方法,只能被該類別本身調用,不能被該類別的實例(物件)調用。extend
,該類別本身可以使用模組中的方法,但該類別的實例不能。extend
通常用於在類別級別添加功能,而不是在實例級別。module MyModule
def hello
puts "Hello from MyModule!"
end
end
class MyClass
extend MyModule
end
MyClass.hello # 这里可以调用MyModule中的方法,但不能通过实例调用
在這個例子中,MyClass類別使用extend將MyModule模組的方法加入為類別方法,因此只有MyClass類別本身可以呼叫hello方法,而不是類別的實例。