oometa
НАИМЕНОВАНИЕ
oometa - oo::meta Реестр данных для классов
Содержание
СИНОПСИС
oo::meta::info
oo::meta::info branchget ?key? ?...?
oo::meta::info branchset ?key...? key value
oo::meta::info dump class
oo::meta::info class is type ?args?
oo::meta::info class merge ?dict? ?dict? ?...?
oo::meta::info class rebuild
oo::meta::metadata class
oo::define meta
oo::class method meta
oo::object method meta
oo::object method meta cget ?field? ?...? field
ОПИСАНИЕ
Пакет oo::meta предоставляет службу реестра данных для классов TclOO.
Использование
oo::class create animal {
meta set biodata animal: 1
}
oo::class create mammal {
superclass animal
meta set biodata mammal: 1
}
oo::class create cat {
superclass mammal
meta set biodata diet: carnivore
}
cat create felix
puts [felix meta dump biodata]
> animal: 1 mammal: 1 diet: carnivore
felix meta set biodata likes: {birds mice}
puts [felix meta get biodata]
> animal: 1 mammal: 1 diet: carnivore likes: {bird mice}
# Modify a class
mammal meta set biodata metabolism: warm-blooded
puts [felix meta get biodata]
> animal: 1 mammal: 1 metabolism: warm-blooded diet: carnivore likes: {birds mice}
# Overwrite class info
felix meta set biodata mammal: yes
puts [felix meta get biodata]
> animal: 1 mammal: yes metabolism: warm-blooded diet: carnivore likes: {birds mice}
Концепция
Концепция oo::meta заключается в том, что каждый класс предоставляет фрагмент локальных данных. При вызове oo::meta::metadata система обходит линейную иерархию предков, созданную oo::meta::ancestors, и рекурсивно объединяет все эти локальные данные для всех предков класса в один словарь (dict). Экземпляры oo::object также могут объединять данные класса с локальным словарем, хранящимся в переменной meta.
КОМАНДЫ
-
oo::meta::info
Команда oo::meta::info предназначена для работы с метаданными класса аналогично тому, как если бы составные части были собраны в один словарь (dict). Система имитирует все стандартные команды dict и добавляет следующие:
-
oo::meta::info branchget ?key? ?...?
Возвращает представление в виде словаря (dict) элемента в args, но с удалением замыкающих двоеточий : из имен полей.
::oo::meta::info $myclass set option color {default: green widget: colorselect} puts [::oo::meta::info $myclass get option color] > {default: green widget: color} puts [::oo::meta::info $myclass branchget option color] > {default green widget color}
-
oo::meta::info branchset ?key...? key value
Объединяет dict с любой другой информацией, содержащейся в узле ?key...?, и добавляет замыкающее : ко всем именам полей.
::oo::meta::info $myclass branchset option color {default green widget colorselect} puts [::oo::meta::info $myclass get option color] > {default: green widget: color}
-
oo::meta::info dump class
Возвращает полный снимок метаданных класса, созданный с помощью oo::meta::metadata
-
oo::meta::info class is type ?args?
Возвращает логическое значение true или false, если элемент ?args? соответствует string is type value
::oo::meta::info $myclass set constant mammal 1 puts [::oo::meta::info $myclass is true constant mammal] > 1
-
oo::meta::info class merge ?dict? ?dict? ?...?
Объединяет все аргументы в один словарь (dict), который затем сохраняется как новое локальное представление для этого класса.
-
oo::meta::info class rebuild
Заставляет систему meta уничтожить любое кэшированное представление метаданных класса перед следующим обращением к oo::meta::metadata
-
oo::meta::metadata class
Возвращает совокупную картину метаданных для class, объединяя его локальные данные с локальными данными его предков.
-
oo::define meta
Пакет внедряет команду oo::define::meta, которая предоставляет определяемому классу доступ к oo::meta::info без необходимости искать имя.
oo::define myclass { meta set foo bar: baz }
-
oo::class method meta
Пакет внедряет новый метод meta в oo::class, который предоставляет экземпляру класса доступ к oo::meta::info.
-
oo::object method meta
Пакет внедряет новый метод meta в oo::object. oo::object объединяет данные своего класса (предоставляемые oo::meta::metadata) с локальной переменной meta для формирования локальной картины метаданных. Этот метод предоставляет следующие дополнительные команды:
-
oo::object method meta cget ?field? ?...? field
Пытается найти отдельный листовой узел и вернуть его значение. Для поиска единичной опции это работает быстрее, чем my meta getnull ?field? ?...? field], поскольку поиск выполняется напрямую, вместо создания результата рекурсивного слияния метаданных класса и локальной переменной meta с ПОСЛЕДУЮЩИМ выполнением поиска.
Ошибки, идеи, обратная связь
Этот документ и описываемый им пакет неизбежно содержат ошибки и другие проблемы. Пожалуйста, сообщайте о них в категории tcloo трекера Tcllib Trackers. Также сообщайте о любых идеях по улучшению пакета и/или документации.
Предлагая изменения в коде, пожалуйста, предоставляйте unified diffs, т. е. вывод команды diff -u.
Обратите внимание, что вложения предпочтительнее патчей, вставленных в текст сообщения. Вложения можно добавить, перейдя в форму Edit тикета сразу после его создания и воспользовавшись крайней левой кнопкой на панели дополнительной навигации.
КАТЕГОРИЯ
TclOO
АВТОРСКИЕ ПРАВА
Copyright © 2015 Sean Woods