Quiero crear una clase "Config" que actúe en algún lugar entre un hash y un árbol. Es solo para almacenar valores globales, que pueden tener un contexto.¿Cómo se llama esta construcción similar a Hash-like/Tree?
Así es como lo uso:
Config.get("root.parent.child_b") #=> "value"
Esto es lo que la clase podría ser:
class Construct
def get(path)
# split path by "."
# search tree for nodes
end
def set(key, value)
# split path by "."
# create tree node if necessary
# set tree value
end
def tree
{
:root => {
:parent => {
:child_a => "value",
:child_b => "another value"
},
:another_parent => {
:something => {
:nesting => "goes on and on"
}
}
}
}
end
end
¿Hay un nombre para este tipo de cosas, en algún lugar entre Hash y árbol (no una Especialización en informática)? Básicamente una interfaz similar a un hash para un árbol.
Algo que da salida como esta:
t = TreeHash.new
t.set("root.parent.child_a", "value")
t.set("root.parent.child_b", "another value")
formato deseado de salida:
t.get("root.parent.child_a") #=> "value"
t.get("root") #=> {"parent" => {"child_a" => "value", "child_b" => "another value"}}
en lugar de esto:
t.get("root") #=> nil
o este (que se obtiene el valor de llamando {}.value
)
t.get("root") #=> {"parent" => {"child_a" => {}, "child_b" => {}}}
esto es asombroso. –
Cualquier idea sobre cómo agregar a) para que los nodos de hoja no sean valores hash, son valores (lo que básicamente significa eliminar el 'attr_accessor: value'), yb) tan' get ("root") 'o cualquier nivel devuelto el árbol de abajo en lugar de nulo si no es un nodo de hoja? tratando de implementar eso, pero agrega mucho código/complejidad, tal vez conozcas algunos trucos de línea. He actualizado la pregunta con resultados de muestra. –
Por lo que veo, está eliminando el código, en lugar de agregar :) – samuil