这两个示例Ruby程序有什么区别吗?看起来一样。 require
只包含内存中的Ruby程序。
require_sample1.rb
class Klass
require "./effective_module"
include Mod
end
require_sample2.rb
require "./effective_module"
class Klass
include Mod
end
effective_module.rb
module Mod
end
答案 0 :(得分:0)
使用您提供的示例代码,行为实际上是相同的。但是,它并不总是一样的。例如,请使用以下代码:
的 effective_module.rb 强>module Foo; end
的 require_sample.rb 强>
require "./effective_module"
class Foo
end
当您运行ruby require_sample.rb
时,您将收到以下错误:
require_sample.rb:2:in `<main>': Foo is not a class (TypeError)
这向我们证明,在第2行,当达到class Foo
时,Foo
已经被定义(由effective_module.rb
)作为模块,Ruby将不会让你重新定义一个模块作为一个类。
现在假设我们做出以下改变:
的 require_sample.rb 强>class Foo
require "./effective_module"
end
现在,当您运行ruby require_sample.rb
时,会出现其他错误:
.../effective_module.rb:1:in `<top (required)>': Foo is not a module (TypeError)
此时Foo
已在class
到达时定义为require
。 Ruby不允许您将模块重新定义为类。
显然,这不是您在现实世界中编写的那种代码,但希望它有助于证明您require
的重要性。