加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 23:13:48 所属栏目:百科 来源:网络整理
导读:我有以下文件: 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 endend foo/stuff/baz.rb module Foo module Stuff class Baz Bar en
我有以下文件:

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的一个特定方法,你可以把这个方法放在一个模块中,并在这两个类中包含这个模块.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读