Spec-Zone.ru › Tcllib

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

Licensed under the BSD license
https://core.tcl-lang.org/tcllib/doc/trunk/embedded/md/tcllib/files/modules/oometa/oometa.md

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API