2014-04-28 217 views

回答

3

你从来没有require模块,你require文件。

在上例中,如果您发布的两个片段位于不同的文件中,例如, my_first_module.rbmodule_tester.rb,那么你就必须做

require "my_first_module" 

你可以引用MyFirstModule之前。

(显然,如果他们是在同一个文件,没有require声明将是必要的,而且是没有意义反正就没有文件require。)

做什么require是寻找给定的Ruby文件在库路径中,然后加载Ruby文件,就像执行它一样。该文件在程序运行时最多只能加载一次(这与load命令的区别在于它与require非常相似)。

在上例中,在使用MyFirstModule之前,您必须为require定义它的文件。

请注意,有一个自动加载机制可以为您自动require文件。另外,Rails会自动执行大部分类的require。因此,不要混淆在某些情况下require声明似乎并不必要。

+0

该自动加载机制如何工作?你怎么知道Rails中的哪些类是自动需要的? –

+1

自动加载通过在代码中使用类似'autoload:MyFirstModule'libs/my_first_module''的工作,然后在第一次使用'MyFirstModule'时自动运行'require'libs/my_first_module''。 Rails对此有一个更复杂的方法,因此您可以编辑您使用的类(例如模型),在浏览器中单击重新加载并加载新版本。它通过手动卸载已经需要的文件来完成。 Rails通过约定(模型,控制器,'lib /'文件夹中的东西等)来完成它所知道的所有类。 – Sigi

+1

从技术上讲,它不会卸载*文件*,但它会使运行时忘记已更改的类,所以自动加载将重新“需要”相应的文件。这是一种黑客攻击,并可能导致非常恶劣的问题(如果你不知道它发生的话)。 – Sigi

0

你不需要。 'Include'将按照你的意愿将方法say_hello公开给你的班级。 'Require'用于从另一个文件中提取所有代码。因此,如果您已经在另一个文件中定义了MyFirstModule,那么您需要该文件,以便您可以将该模块包含在您的课程中。

+1

此答案有误导性。他没有说他发布的两个片段在同一个文件中。 – Sigi

相关问题