在Ruby中,include和require有什么区别?
在Ruby中,include和require有什么区别?
我的问题类似于“Ruby中include和extend的区别是什么?”。
在Ruby中,require
和include
的区别是什么?如果我只想在我的类中使用模块中的方法,我应该require
它还是include
它?
如果你使用一个模块,那么你就把所有的方法引入到了你的类中。
如果你用一个模块extend
一个类,那么这意味着你把这个模块的方法作为类方法“引入了”进来。
如果你用一个模块include
一个类,那么这意味着你把这个模块的方法作为实例方法“引入了”进来。
例如:
module A def say puts "this is module A" end end class B include A end class C extend A end
B.say
=> B类没有'say'方法
B.new.say
=> 这是模块A
C.say
=> 这是模块A
C.new.say
=> C类没有'say'方法
在Ruby中,“include”和“require”有什么区别?
答案:
include方法和require方法执行非常不同的操作。
require方法与其他大部分编程语言中的include方法相同:运行另一个文件。它还会追踪您之前所需的文件,不会重复要求。要运行另一个文件而不使用此附加功能,可以使用load方法。
include方法获取另一个模块中的所有方法并将它们包含到当前模块中。这是一种语言级别的事情,而不是与require相似的文件级别的事情。include方法是使用其他模块(通常称为混入)“扩展”类的主要方法。例如,如果您的类定义方法“each”,则可以包含mixin模块Enumerable并将其用作集合。这可能会令人困惑,因为其他语言中的include动词用法非常不同。
因此,如果您只想使用模块而不是扩展它或执行混入,则应使用require
。
有趣的是,Ruby的 require
类似于C的 include
,而Ruby的 include
几乎与C的 include
无关。