什么时候需要Ruby中的模块?

什么时候需要Ruby中的模块?,ruby,Ruby,说你有 module MyFirstModule def say_hello puts "Hello" end end 及 在类定义上方是否需要requiremyfirstmodule语句?您是否需要该模块?什么时候,为什么?您不需要要求Include“将根据您的需要向您的类公开方法say_hello。”Require'用于从另一个文件中提取所有代码。因此,如果您在另一个文件中定义了MyFirstModule,则需要该文件,以便可以将该模块包含在类中。如果您从不需要模块,则需要

说你有

module MyFirstModule
  def say_hello
    puts "Hello"
  end
end


在类定义上方是否需要
requiremyfirstmodule
语句?您是否需要该模块?什么时候,为什么?

您不需要要求Include“将根据您的需要向您的类公开方法say_hello。”Require'用于从另一个文件中提取所有代码。因此,如果您在另一个文件中定义了MyFirstModule,则需要该文件,以便可以将该模块包含在类中。

如果您从不
需要
模块,则需要
需要
文件

在上面的示例中,如果您发布的两个片段位于不同的文件中,例如
my_first_module.rb
module_tester.rb
,那么您必须执行以下操作:

require "my_first_module"
然后才能引用
MyFirstModule

(显然,如果它们在同一个文件中,则不需要任何
require
语句,而且无论如何也没有意义,因为没有文件需要
require

require
所做的是在库路径中查找给定的Ruby文件,然后加载Ruby文件,就像执行了它一样。该文件在程序运行时最多加载一次(这与
load
命令不同,后者与
require
命令非常相似)

在上面的示例中,在使用
MyFirstModule
之前,必须
需要定义它的文件


请注意,有一种自动加载机制,可以为您自动要求文件。而且,Rails确实自动地要求大多数类。因此,不要混淆,在某些情况下,
require
语句似乎不是必需的。

这个答案具有误导性。他没有说他发布的两个片段在同一个文件中。自动加载机制是如何工作的?您如何知道Rails中需要自动加载哪些类?自动加载是通过在代码中使用类似于
Autoload:MyFirstModule'libs/my\u first\u module'
的东西来工作的,它将在第一次使用
MyFirstModule
时自动运行
require'libs/my\u first\u module'
。Rails对此有一种更复杂的方法,因此您可以编辑您使用的类(例如模型),在浏览器中单击“重新加载”,然后加载新版本。它通过手动卸载已经需要的文件来实现这一点。Rails按照惯例为它知道的所有类(模型、控制器、
lib/
文件夹中的东西等)执行此操作。从技术上讲,Rails不会卸载文件,但它会使运行时忘记已更改的类,因此自动加载将重新需要相应的文件。这是一种黑客行为,可能会导致非常棘手的问题(如果你不知道它正在发生)。啊,好的,谢谢你的解释!让我再问你一个问题:你是如何对这些东西有如此深刻的理解的?我在大学里上了一些Java课程,尝试了一些Rails教程,现在我正在和一位有良好基础的Ruby专家一起学习Ruby。你有很强的CS背景吗?你是如何理解所有这些Ruby和Rails的?我有很强的CS背景,并且我已经与Ruby on Rails合作好几年了。你迟早会遇到所有这些问题,并从中吸取教训。有很多人比我知识渊博得多。Ruby是一种功能强大的语言,Rails非常复杂。这来之不易。请始终记住,Ruby与Rails不同。
require "my_first_module"