includes和extends的区别
时间: 2024-05-06 22:18:47 浏览: 5
`include` 和 `extend` 是两种不同的 Ruby 模块引入方式,它们有以下区别:
1. `include` 引入的模块方法成为了类的实例方法,可以用来增强类的实例方法。
2. `extend` 引入的模块方法成为了类方法,可以用来增强类的类方法或者说是单件方法(singleton method)。
举个例子:
```ruby
module MyModule
def my_method
puts "Hello from MyModule!"
end
end
class MyClass
include MyModule # 引入 MyModule 实例方法
extend MyModule # 引入 MyModule 类方法
end
obj = MyClass.new
obj.my_method # Hello from MyModule!
MyClass.my_method # Hello from MyModule!
```
在上面的例子中,`MyModule` 定义了一个实例方法 `my_method`。`MyClass` 类通过 `include` 和 `extend` 分别引入了 `MyModule` 模块。
当 `include` 引入 `MyModule` 时,`MyClass` 类的实例都可以使用 `MyModule` 中定义的实例方法。因此,`obj.my_method` 输出 "Hello from MyModule!"。
当 `extend` 引入 `MyModule` 时,`MyClass` 类本身可以使用 `MyModule` 中定义的类方法或者单件方法。因此,`MyClass.my_method` 输出 "Hello from MyModule!"。