gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 07:05:30 25 4
gpt4 key购买 nike

我有以下文件:

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 中甚至可能吗?以防万一,我这样做只是因为我需要专门继承初始化方法。

最佳答案

当你把它们放在同一个脚本中时,它工作得很好:

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 中的一个特定方法,您可以将此方法放在一个模块中,并将此模块包含在两个类中。

关于ruby - 如何从模块中定义的类扩展 ruby​​ 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41496019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com