1

我有兴趣在属于同一模块的多个文件中定义多个类。模块 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)`

有任何想法吗?

4

3 回答 3

1

你试过include代替require吗?

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

# In Sdevv.rb:

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

# Then, when you need it:
require("CktCheck")
require("Sdevv")
于 2013-02-18T10:17:28.693 回答
0

在里面Sdevv.rb,你忘了SdevvCktCheck模块内定义类。因此,它是在顶层定义的。

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

module CktCheck
  class Sdevv
    # …
  end
end
于 2013-02-18T12:10:57.213 回答
0

我不认为拥有一个单独的模块文件是个好主意。“模块”背后的想法是

  1. 通过将它们保持在相同的“命名空间”(即模块名称)中来对相同类型的相似事物进行分组
  2. 当您使用的“名称”碰巧在其他命名空间(其他模块)中使用时,避免名称冲突。

每个类有 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'   
于 2013-02-18T11:32:23.037 回答