要求在ruby

时间:2016-08-09 14:03:26

标签: ruby

这两个示例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

1 个答案:

答案 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 的重要性。