以下两个例子之间有区别吗?由于方法名称,是否可能在第二个示例中获取方法冲突?模块中的方法是否自动"封装"在此模块中?
例1
module ImageUtils
def self.preview(image)
#do something
end
end
Run Code Online (Sandbox Code Playgroud)
例2
module ImageUtils
def preview(image)
#do something
end
end
Run Code Online (Sandbox Code Playgroud)
如果我将所有内容放入Foo模块中的一个类中ImageUtils,它会有什么不同?
区别在于第一个示例定义了调用的模块方法preview,第二个示例定义了mixin方法 preview.
因此,如果将第一个模块包含在类中,您将能够在类上调用此方法(而在类实例上调用该方法会导致错误),而将第二个模块包含在类中将允许您在类'实例上调用该方法,但调用类本身的方法将导致
NoMethodError: undefined method preview for Foo:Class
Run Code Online (Sandbox Code Playgroud)
关于基于类和方法中包含的相同方法名称的冲突.回答这个问题的方法是Ruby方法查找,如下:
找到方法后,方法查找停止.
使用prependmixin方法将在方法查找中具有优先权;
使用include类中定义的方法在方法查找中具有优先权.
所以不可能发生冲突.
| 归档时间: |
|
| 查看次数: |
295 次 |
| 最近记录: |