我有一个像
这样的层次结构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,但我不想这样做。我只是想垂直继承。
答案 0 :(得分:4)
很难处理类似ABC的命名系统)
如果您想在每个课程中包含10个模块,您可以这样做。我们假设你有模块ModuleTest::Files
和ModuleTest::Network
:
in module_test / files.rb 你可以像这样制作一些 此类包含您拥有的所有功能,因此从中继承您的类: 输出:module ModuleTest
module Network
def network
puts 'hello from ModuleTest::Network#network'
end
end
end
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
答案 1 :(得分: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语句中稍微具体一些,但如果您已经能够“包含”脚本,那么您已经解决了这个问题。 (除非'包含'表示将其复制并粘贴到源文件中。)