-3

私は次のような階層を持っています

ABC(フォルダ)----> abc.rb、def.rb

DEF(フォルダ)----> a1.rb、b1.rb

GHI(フォルダ)----> x1.rb、y1.rb

abc.rbへのモジュールであるdef.rbを継承/インクルードしたいのですが、a1はabc.rbを継承し、def.rbで定義されているすべてのメソッドにアクセスできる必要があります。

現在、すべてのスクリプトファイルにdef.rbを含めていますが、これは行いたくありません。縦に継承したいだけです。

4

2 に答える 2

4

ABCのようなネーミングシステムを扱うのは難しいです)

各クラスに10個のモジュールを含める場合は、この方法で行うことができます。モジュールがModuleTest::Filesあり、ModuleTest::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 に答える