普通ruby中的目录类型结构

普通ruby中的目录类型结构,ruby,object,directory-structure,Ruby,Object,Directory Structure,我正在用Ruby开发一个新的生成器(我的第一个项目),我正在为该生成器构建虚拟世界系统。我正在尝试用我的设置构建一个类似目录的结构。例如,我创建了一个“地球”设置,它包含“北美”和“美国” 我现在的做法是,我用一个可选的超集初始化每个设置(否则为零),然后我有一个add_设置方法,该方法创建一个新的设置,将self作为超集,并将其添加到一个数组中,在该数组中跟踪所有设置。然后,我很容易添加其他方法来查找父母和孩子 def initialize(name, supersetting = nil,s

我正在用Ruby开发一个新的生成器(我的第一个项目),我正在为该生成器构建虚拟世界系统。我正在尝试用我的设置构建一个类似目录的结构。例如,我创建了一个“地球”设置,它包含“北美”和“美国”

我现在的做法是,我用一个可选的超集初始化每个设置(否则为零),然后我有一个add_设置方法,该方法创建一个新的设置,将self作为超集,并将其添加到一个数组中,在该数组中跟踪所有设置。然后,我很容易添加其他方法来查找父母和孩子

def initialize(name, supersetting = nil,subsettings = [])
    @name = name
    @supersetting = supersetting
    @subsettings = subsettings
end

def add_setting(name)
    new_setting = Setting.new(name, self)
    @subsettings.push(new_setting)
end

def tree
    tree = []
    setting = self
    while !(setting == nil) do
        tree.unshift(setting.name)
        setting = setting.supersetting
    end
    tree
end

def all_subsettings
    all = @subsettings
    @subsettings.each do |sub|
        all = all + sub.all_subsettings
    end
    all 
end


earth = Setting.new("Earth")
earth.add_setting("North America")
earth.subsettings[0].add_setting("USA")
earth.subsettings[0].subsettings[0].add_setting("Virginia")
earth.subsettings[0].subsettings[0].add_setting("Washington, D.C.")
earth.subsettings[0].subsettings[0].subsettings[0].add_setting("Alexandria")
earth.subsettings[0].subsettings[0].subsettings[0].add_setting("Richmond")
earth.subsettings[0].subsettings[0].subsettings[1].add_setting("Georgetown")   
p earth.see_all_subsettings  
p earth.name_all_subsettings
屈服

["Earth > North America", "Earth > North America > USA", "Earth > North America > USA > Virginia", "Earth > North America > USA > Washington, D.C.", "Earth > North America > USA > Virginia > Alexandria", "Earth > North America > USA > Virginia > Richmond", "Earth > North America > USA > Washington, D.C. > Georgetown"]

["North America, Earth", "USA, North America, Earth", "Virginia, USA, North America, Earth", "Washington, D.C., USA, North America, Earth", "Alexandria, Virginia, USA, North America, Earth", "Richmond, Virginia, USA, North America, Earth", "Georgetown, Washington, D.C., USA, North America, Earth"]
如您所见,如果我想修改或添加单个元素,它会变得很麻烦,因为我有所有这些嵌套调用。我必须知道东西在哪里,当我真正开始在这里建造东西的时候,这是不现实的

我希望它的行为更像一个目录,在那里我有一个指针告诉我我在哪里,然后我可以快速调用对象,不管我有多深,因为路径的第一部分已经知道了。我正试图弄清楚如何做到这一点——现在在哈希和查找函数中模糊地思考——但在我深入讨论之前,我要做的是什么?用简单的ruby来做这件事而不是学习一个框架是愚蠢的吗?解决这样的问题有什么概念性的东西或策略吗

伙计们,抱歉这么笼统。我对编码还不熟悉,但我的知识还不足以更简洁地提问

添加设置(“北美”)
同时返回设置数组,因此您可以执行以下操作:

earth = Setting.new("Earth"); 
earth.add_setting("North America").add_setting("USA").add_setting("Virginia")
换句话说,您应该能够做到这一点:

earth = Setting.new("Earth"); 
north_america = earth.add_setting("North America"); 
virginia = north_america.add_setting("virginia");

你的
子设置
方法是否返回
设置
类的实例?@DarekNędza看来
子设置
是一个
设置
类对象的数组。我不确定,但是
添加设置(“北美”)
也返回
设置
的数组,所以你可以这样做:
earth=Setting.new(“地球”);earth.add_setting(“北美”).add_setting(“美国”).add_setting(“弗吉尼亚”)
换句话说,您应该能够做到:
earth=setting.new(“地球”);北美=地球。添加设置(“北美”);弗吉尼亚=北美。添加设置(“弗吉尼亚”)试试这个。如果它能工作,我将重写它作为一个答案(对于其他用户)。mbrach-它确实是一个设置类对象的实例数组。Darek Nedza-按原样,add_Setting实际上返回了数组,但我修改它以返回设置对象。这实际上是可行的——它们指向同一个对象。我可以通过名称或在数组中调用来修改它,然后无论我在哪里拉它,它都会被更改。谢谢应该可以用这个做很多事情。这其实是一件非常简单的事情,我不知道我能做,所以答案很好。