Есть ли способ переместить "вверх" хэш-дерево в рубине? - PullRequest
0 голосов
/ 21 июня 2011

У меня есть "хеш-дерево", подобное этому:

dat = {
    'building' => {'street' => 'High Street 10', 'people' =>[Person, Person]}
}

Человек может быть кем угодно.

Итак, в моем коде я напрямую обращаюсь к «зданию» следующим образом: dat['building'], теперь есть ли способ как-то подняться, вверх по дереву, чтобы снова получить доступ к {'building' => {...}}, снова?

В настоящее время у меня есть функция, которая позволяет мне получить доступ к любому из них:

    def info with_root = false
      with_root ? dat : dat['building']
    end #info

Это не выглядит преступно плохо (я думаю), но я надеюсь, что есть более хороший способ.

Спасибо!

1 Ответ

2 голосов
/ 21 июня 2011

Краткий ответ: нет.

Причина в этом.

Предположим, у вас есть:

 addr = {'street' => 'High Street 10', 'people' =>[Person, Person]}
 dat1 = {'building' => addr}
 dat2 = {'zip'=>55117, 'electricBillID'=>11223344, 'address' => addr

Что происходит, когда вы поднимаетесь? Вы добираетесь до dat1 или dat2?

Если вам действительно нужно это сделать - и это не очевидно, что вы это делаете - вам нужно использовать более сложную структуру данных, которая включает ссылки на содержащие объекты - что-то вроде дерева (https://rubygems.org/gems/rubytree) или простая структура графа.

И, как уже упоминалось, если вы просто зависаете на корневом объекте, вы всегда можете проползти обратно по хешу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...