Уведомление об объектном разрушении в Ruby

У @dparoli была хорошая идея.

Иногда для отношений «многие ко многим» используют наследуемый класс Pivot, но пока это не имеет значения.

Так что теперь мы можем использовать этот код ниже для списков.

$country = Country::findOrFail(1);
foreach ($country->countryStreet as $countryStreet){
    echo $countryStreet->street->name
    foreach($countryStreet->numbers as $number) {
       $number;
    }
}

class Countries
     public function countryStreet()
     {
         return $this->hasMany(CountryStreet::class, 'country_id', 'id');
     }

Class CountryStreet with method block() using relation hasOne

Еще одна реализация.

16
задан Josh Moore 1 October 2008 в 05:02
поделиться

1 ответ

Если необходимо управлять тем, что происходит, когда объект уничтожается, действительно необходимо явно уничтожать его сами - это дизайном. Вы, как предполагается, не можете уничтожить объект явно любой - это также дизайном.

, Другими словами, с точки зрения Вашей программы, объект никогда не уничтожается или не непрочен. По этим причинам необходимо заново продумать проблему (это не редкая потребность - выпуск ресурсов, когда объект больше не необходим), таким образом, это вписывается в парадигму Ruby.

Установка объекта к нолю дает подсказку сборщику "мусора", но не обязательно сразу уничтожает его.

Однако, если у Вас должен быть сборщик "мусора", обрабатывают его, затем продолжают читать.

нет никакой прямой поддержки деструктора, но у Вас может быть он, звонят функция финализатора , когда он уничтожается.

Согласно http://pleac.sourceforge.net/pleac_ruby/classesetc.html это не может быть собрано "мусор", если это содержит ссылку на исходный объект, так должен быть метод класса и не метод экземпляра.

class MyClass
    def initialize
        ObjectSpace.define_finalizer(self,
                                     self.class.method(:finalize).to_proc)
    end
    def MyClass.finalize(id)
        puts "Object #{id} dying at #{Time.new}"
    end
end
21
ответ дан 30 November 2019 в 22:10
поделиться
Другие вопросы по тегам:

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