11.3.7. Удаление определений
11.3.7. Удаление определений
Вследствие динамичности Ruby практически все, что можно определить, можно и уничтожить. Это может пригодиться, например, для того, чтобы «развязать» два куска кода в одной и той же области действия, избавляясь от переменных после того, как они были использованы. Другой повод — запретить вызовы некоторых потенциально опасных методов. Но по какой бы причине вы ни удаляли определение, делать это нужно крайне осторожно, чтобы не создать себе проблемы во время отладки.
Радикальный способ уничтожить определение — воспользоваться ключевым словом undef (неудивительно, что его действие противоположно действию def). Уничтожать можно определения методов, локальных переменных и констант на верхнем уровне. Хотя имя класса — тоже константа, удалить определение класса таким способом невозможно.
def asbestos
puts "Теперь не огнеопасно"
end
tax =0.08
PI = 3
asbestos
puts "PI=#{PI}, tax=#{tax}"
undef asbestos
undef tax
undef PI
# Любое обращение к этим трем именам теперь приведет к ошибке.
Внутри определения класса можно уничтожать определения методов и констант в том же контексте, в котором они были определены. Нельзя применять undef внутри определения метода, а также к переменной экземпляра.
Существуют (определены в классе Module) также методы remove_method и undef_method. Разница между ними тонкая: remove_method удаляет текущее (или ближайшее) определение метода, a undef_method ко всему прочему удаляет его и из суперклассов, не оставляя от метода даже следа. Это различие иллюстрирует листинг 11.6.
Листинг 11.16. Методы remove_method и undef_method
class Parent
def alpha
puts "alpha: родитель"
end
def beta
puts "beta: родитель"
end
end
class Child < Parent
def alpha
puts "alpha: потомок"
end
def beta
puts "beta: потомок"
end
remove_method :alpha # Удалить "этот" alpha.
undef_method :beta # Удалить все beta.
end
x = Child.new
x.alpha # alpha: родитель
x.beta # Ошибка!
Метод remove_const удаляет константу.
module Math
remove_const :PI
end
# PI больше нет!
Отметим, что таким способом можно удалить и определение класса (потому что идентификатор класса — это просто константа):
class BriefCandle
#...
end
out_out = BriefCandle.new
class Object
remove_const :BriefCandle
end
# Создать еще один экземпляр класса BriefCandle не получится!
# (Хотя out_out все еще существует...)
Такие методы, как remove_const и remove_method, являются закрытыми (что и понятно). Поэтому во всех примерах они вызываются изнутри определения класса или модуля, а не снаружи.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Список определений
Список определений Бывает, что на сайте нужно создать список терминов или словарь. Это особенно актуально для сайтов узкой направленности. Для создания подобных конструкций служит список определений.Список определений – это особый вид списка, который применяется для
14.4.6. Удаление вершины дерева и удаление дерева: tdelete() и tdestroy()
14.4.6. Удаление вершины дерева и удаление дерева: tdelete() и tdestroy() Наконец, вы можете удалить элементы из дерева и, на системах GLIBC, удалить само дерево целиком:void *tdelete(const void *key, void **rootp,int (*compare)(const void*, const void*));/* Расширение GLIBC, в POSIX нет: */void tdestroy(void *root, void (*free_node)(void *nodep));Аргументы
19.6.8 Список определений
19.6.8 Список определений Список определений является последовательностью терминов и их определений: <DL><LH>Терминология WWW</LH><DТ>Язык разметки гипертекста (HTML)<DD>Язык форматирования для записи гипертекстовых документов. Теги документаидентифицируют такие
14.1. Обновление определений
14.1. Обновление определений Защитник Windows в своей работе использует специальную таблицу определений, которая содержит описание кусков кода всех существующих вирусов, троянов и других подобных программ. И если эта таблица не будет содержать актуальных данных, программа
Удаление ограничений
Удаление ограничений Часто приходится удапять различные ограничения по самым разным причинам. Чтобы удалить ограничение, необходимо воспользоваться предложением ALTER TABLE следующего вида: ALTER TABLE cablename DROP CONSTRAINT constraintname где constraintname - имя ограничения, которое следует
Удаление программ
Удаление программ Приложения у нас – вплоть до самого важного – в привычку входят, ветшают, как платье. Поэтому рано или поздно наступает момент, когда программу приходится удалять. Например, вышла новая версия этого же приложения, или конкуренты выпустили более
22. Минимизируйте зависимости определений и избегайте циклических зависимостей
22. Минимизируйте зависимости определений и избегайте циклических зависимостей РезюмеИзбегайте излишних зависимостей. Не включайте при помощи директивы #include определения там, где достаточно предварительного объявления.Избегайте взаимозависимостей. Циклические
2.30. Удаление дубликатов
2.30. Удаление дубликатов Цепочки повторяющихся символов можно сжать до одного методом squeeze:s1 = "bookkeeper"s2 = s1.squeeze # "bokeper"s3 = "Hello..."s4 = s3.squeeze # "Helo."Если указан параметр, то будут удаляться только дубликаты заданных в нем символов:s5 = s3.squeeze(".") # "Hello."Этот параметр подчиняется тем же
10.11. Удаление каталога
10.11. Удаление каталога ПроблемаТребуется удалить каталог, причем эта операция должна быть переносимой, т.е. в ней не должен использоваться специфичный для конкретной ОС программный интерфейс.РешениеНа большинстве платформ вы сможете воспользоваться системным вызовом
Окно определений программного кода
Окно определений программного кода Если вы имеете опыт программирования в .NET 1.1, то должны знать об утилите Windows Forms Class Viewer, wincv.exe (утилита обзора классов Windows Forms). Этот инструмент позволяет задать имя .NET-типа и просмотреть его C#-определение. В версии .NET 2.0 утилиты wincv.exe уже
6.6.1. Удаление
6.6.1. Удаление В общем случае удаление осуществляется двумя формами функции-члена erase(). Первая форма удаляет единственный элемент, вторая – диапазон, отмеченный парой итераторов. Для последнего элемента можно воспользоваться функцией-членом pop_back().При вызове erase()
Удаление
Удаление Когда длительность фильма, редактируемого в Pinnacle Studio, велика (полчаса, час и более), файлы проекта могут занимать на диске очень много места. Когда часть проектов становится ненужной (фильм создан, DVD или видеокассеты записаны), их можно удалить. Для удаления
Одно правило и несколько определений
Одно правило и несколько определений Правило типов для решения Кэтколл имеет простую формулировку:Правило типов для КэтколлПолиморфные кэтколлы некорректны.В его основе - столь же простые определения. Прежде всего, полиморфная сущность:Определение: полиморфная
Удаление файлов
Удаление файлов Если определенные файлы становятся ненужными, их можно выбросить в корзину (не в прямом смысле, конечно). Как это сделать?1) Отметим объекты, которые необходимо удалить.2) Щелкнем правой кнопкой мыши на одном из отмеченных значков и выберем в появившемся