如何从模块中定义的类扩展ruby类?

前端之家收集整理的这篇文章主要介绍了如何从模块中定义的类扩展ruby类?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下文件

file.rb

require_relative 'foo/bar'
baz = Foo::Stuff::Baz.new
# do stuff

foo/bar.rb

require_relative 'stuff/baz'
module Foo
    class Bar
        def initialize
            # do stuff
        end
    end
end

foo/stuff/baz.rb

module Foo
    module Stuff
        class Baz < Bar
        end
    end
end

我收到以下错误

`’: uninitialized constant Foo::Stuff::Bar (NameError)

我有什么问题吗?这在Ruby中是否可行?如果它很重要,我只是这样做,因为我需要专门继承initialize方法.

解决方法

当你把它们放在同一个脚本中时,它工作得很好:
module Foo
  class Bar
    def initialize
      # do stuff
    end
  end
end

module Foo
  module Stuff
    class Baz < Bar
    end
  end
end

p Foo::Stuff::Baz.ancestors
#=> [Foo::Stuff::Baz,Foo::Bar,Object,Kernel,BasicObject]

因此,您需要文件的方式或顺序一定存在问题.

另外,如果你只需要Foo :: Stuff :: Baz中Foo :: Bar的一个特定方法,你可以把这个方法放在一个模块中,并在这两个类中包含这个模块.

原文链接:https://www.f2er.com/ruby/264996.html

猜你在找的Ruby相关文章