Ruby Dup / клон рекурсивно

Для этого вы можете использовать debug_backtrace (). Это немного, но для целей отладки полезно.

class normalClass {
 public function someMethod() { 
      $trace = debug_backtrace();
      $trace[1]->object->doSomething();
 }

}

23
задан Andrew Grimm 3 January 2012 в 22:04
поделиться

4 ответа

Вот как вы делаете глубокие копии в Ruby

d = Marshal.load( Marshal.dump(h) )
39
ответ дан Sergio Tulentsev 3 January 2012 в 22:04
поделиться

Если вы в Rails: Hash.deep_dup

2
ответ дан fguillen 3 January 2012 в 22:04
поделиться

Если пара Marchal #dump/load не работает, для существует метод Hash #deep_dup, поэтому вы можете:

h = {'name' => 'sayuj', 
 'age' => 22, 
 'project' => {'project_name' => 'abc', 
               'duration' => 'prq'}}

h1 = h.deep_dup
2
ответ дан Малъ Скрылевъ 3 January 2012 в 22:04
поделиться

Другой альтернативой является использование гема full_dup (полное раскрытие: я являюсь автором этого драгоценного камня), который обрабатывает массивы, хэши, структуры и может быть расширен до пользовательских классов.

Использовать:

require 'full_dup'
# Other code omitted ...
d = h.full_dup

Также обратите внимание, что full_dup обрабатывает сложные отношения данных, в том числе с циклами или рекурсией.

0
ответ дан Peter Camilleri 3 January 2012 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: