-3

我有一个像

ABC(文件夹) ----> abc.rb, def.rb

DEF(文件夹) ----> a1.rb, b1.rb

GHI(文件夹) ----> x1.rb, y1.rb

我想继承/包含 def.rb,这是 abc.rb 中的一个模块,然后 a1 应该继承 abc.rb 并且应该能够访问 def.rb 中定义的所有方法。

现在,我在每个脚本文件中都包含了 def.rb,但我不想这样做。我只想垂直继承。

4

2 回答 2

4

很难处理类似 ABC 的命名系统)

如果你想在每个类中包含 10 个模块,你可以这样做。假设您有模块ModuleTest::FilesModuleTest::Network

在 module_test/network.rb

module ModuleTest
    module Network
        def network
            puts 'hello from ModuleTest::Network#network'
        end
    end
end

在 module_test/files.rb

module ModuleTest
    module Files
        def files
            puts 'hello from ModuleTest::Files#files'
        end
    end
end

你可以像这样制作一些ModuleTest::Base课程:

require 'module_test/files'
require 'module_test/network'

module ModuleTest
    class Base
        include Files
        include Network
    end
end

这个类包括你拥有的所有功能,所以从它继承你的类:

require 'module_test/base'

class Foo < ModuleTest::Base 
end

foo = Foo.new
foo.network
foo.files

输出:

>ruby -I. foo.rb
hello from ModuleTest::Network#network
hello from ModuleTest::Files#files
于 2012-09-13T08:07:46.207 回答
0

首先要指出的是,我怀疑我误解了您的问题,因为我不明白您为什么要这样做。所以如果是这种情况,请指出,我会删除它。

您描述的过程有效(至少在 Ruby 1.9.3 中对我而言)。

module Def
  def method_from_def
    puts "Method from Def"
  end
end

class Abc
  include Abc
end

class X < Abc
end

X.new.method_from_def #=> "Method from Def"

您可能需要在您的 require 语句中稍微具体一点,但是如果您已经能够“包含”该脚本,那么您已经把它记下来了。(除非“包含”是指将其复制并粘贴到源文件中。)

于 2012-09-13T07:55:28.490 回答