Extend include
时间: 2023-06-11 18:08:15 浏览: 53
`extend` 和 `include` 都是 Ruby 中用于模块(module)混入(mixin)的关键字。它们的主要区别在于,`extend` 是将模块中的方法添加到类的单个对象(即类的实例)中,而 `include` 是将模块中的方法添加到类本身中,从而影响该类的所有实例。
具体来说,当使用 `extend` 时,模块中的方法会变成该类的实例方法,只能在该类的实例上调用。例如:
```ruby
module MyModule
def my_method
puts "Hello from MyModule!"
end
end
class MyClass
end
obj = MyClass.new
obj.extend(MyModule)
obj.my_method # 输出 "Hello from MyModule!"
```
而当使用 `include` 时,模块中的方法会变成该类的类方法,可以在该类的所有实例上调用。例如:
```ruby
module MyModule
def my_method
puts "Hello from MyModule!"
end
end
class MyClass
include MyModule
end
obj = MyClass.new
obj.my_method # 输出 "Hello from MyModule!"
```
需要注意的是,如果一个类同时使用了 `extend` 和 `include`,那么 `extend` 的优先级更高,因为它会将方法添加到对象级别,而 `include` 只会影响类级别。