要求单个模块文件命名多个文件中的多个类

时间:2013-02-18 10:11:03

标签: ruby class module

我感兴趣的是在属于同一模块的多个文件中定义多个类。模块CktCheck应该包含类Sdevv。这是代码:

module CktCheck
  require 'Sdevv.rb'
end

在Sdevv.rb文件中,我有:

class Sdevv
...
...
end

我想通过使用这些行来实例化类Sdevv的实例

require("CktCheck.rb")
cktcheck_file = CktCheck::Sdevv.new("CktCheck.sdevv")

但是,引发了以下异常:

./isBeginDevLine.rb:6:in `<main>': uninitialized constant CktCheck::Sdevv (NameError)`

任何想法?

3 个答案:

答案 0 :(得分:1)

您是否尝试过include而不是require

此外,您可以在另一个文件中打开该模块以添加该类:

# In Sdevv.rb:

module CktCheck
  class Sdevv
  ...
  ...
  end
end

# Then, when you need it:
require("CktCheck")
require("Sdevv")

答案 1 :(得分:0)

我不认为拥有单独的模块文件是个好主意。 <模块'背后的理念是

  1. 通过将它们保持在相同的“命名空间”(即模块名称)
  2. 来对相同类似的事物进行分组
  3. 当您使用的'name'碰巧用于其他名称空间(其他模块)时,避免名称冲突。
  4. 每个类有1个文件并通过重新打开该模块在同一个模块中定义所有新类是很好的。

    #In first_thing.rb
    module SameThings
      class FirstThing
      ....
      end
    end
    
    #In second_thing.rb
    module SameThings
      class SecondThing
      .....
      end
    end
    
    now where ever you need to use FirstThing or SecondThing  
    require 'first_thing'   or 
    require 'second_thing'   
    

答案 2 :(得分:0)

Sdevv.rb内,您忘记在Sdevv模块中定义类CktCheck。因此,它定义在顶层。

您需要从顶层引用它而不是Sdevv而不是CktCheck::Sdevv,或者,如果您希望在CktCheck模块中定义它,那么您,那么,必须在CktCheck模块中定义它:

module CktCheck
  class Sdevv
    # …
  end
end