我的问题类似于“Ruby中include和extend的区别是什么?”
Ruby中require和include的区别是什么?如果我只是想在我的类中使用模块中的方法,我应该要求它还是包含它?
我的问题类似于“Ruby中include和extend的区别是什么?”
Ruby中require和include的区别是什么?如果我只是想在我的类中使用模块中的方法,我应该要求它还是包含它?
当前回答
require(name)
它将返回bolean true/false
作为参数传递给require的名称,ruby将尝试在加载路径中找到具有该名称的源文件。 如果你尝试在第一次之后加载相同的库,require方法将返回' false '。require方法仅在您正在加载的库定义在单独的文件中时才需要使用。 所以它会跟踪那个库是否已经被加载。
include module_name
假设你需要在两个不同的类中有一些方法。这样就不需要在两个类中都写了。相反,你可以在module中定义它。然后将此模块包含在其他类中。 它是由Ruby提供的,只是为了保证DRY原则。它用于DRY代码以避免重复
其他回答
'Load'-插入文件内容。(每次调用文件时解析文件)
'Require'-插入一个文件解析的内容。(文件解析一次,存储在内存中)
'Include'-将模块包含到类中,并可以使用模块内的方法作为类的实例方法
'Extend'-将模块包含到类中,并可以使用模块内的方法作为类方法
您曾经尝试过要求一个模块吗?结果如何?试试:
MyModule = Module.new
require MyModule # see what happens
模块不是必需的,只是包含的!
下面是require和include之间的一些基本区别:
要求:
Require从文件系统读取文件,解析它,保存到内存中,并在给定的位置运行它,这意味着如果你在脚本运行时更改了任何内容,那么这些更改将不会反映出来。 我们按名称要求文件,而不是按模块名。 它通常用于库和扩展。
包括:
当你将一个模块包含到你的类中时,它的行为就像你将模块中定义的代码插入到你的类中一样。 我们包含模块名,而不是文件名。 它通常用于干涸代码和删除代码中的重复。
require(name)
它将返回bolean true/false
作为参数传递给require的名称,ruby将尝试在加载路径中找到具有该名称的源文件。 如果你尝试在第一次之后加载相同的库,require方法将返回' false '。require方法仅在您正在加载的库定义在单独的文件中时才需要使用。 所以它会跟踪那个库是否已经被加载。
include module_name
假设你需要在两个不同的类中有一些方法。这样就不需要在两个类中都写了。相反,你可以在module中定义它。然后将此模块包含在其他类中。 它是由Ruby提供的,只是为了保证DRY原则。它用于DRY代码以避免重复
包括 如下所示,当你将一个模块包含到你的类中时,就好像你将模块中定义的代码插入到类中,在那里你“包含”了它。它允许' mixin '行为。它用于DRY代码以避免重复,例如,如果模块中有多个类需要相同的代码。
负载 load方法几乎类似于require方法,除了它不跟踪库是否已加载。因此,可以多次加载一个库,而且在使用load方法时,必须指定“。Rb:库文件名的扩展名。
需要 require方法允许您加载一个库,并防止它被多次加载。如果你尝试在第一次之后加载相同的库,require方法将返回' false '。require方法只需要在你正在加载的库定义在一个单独的文件中,这是通常的情况。
你可以选择这个 http://ionrails.com/2009/09/19/ruby_require-vs-load-vs-include-vs-extend/