oometa - oo::meta A data registry for classess
Contents
Bugs, Ideas, Feedback
This document, and the package it describes, will undoubtedly contain bugs and other problems. Please
report such in the category tcloo of the TcllibTrackers [http://core.tcl.tk/tcllib/reportlist]. Please
also report any ideas for enhancements you may have for either package and/or documentation.
When proposing code changes, please provide unifieddiffs, i.e the output of diff-u.
Note further that attachments are strongly preferred over inlined patches. Attachments can be made by
going to the Edit form of the ticket immediately after its creation, and then using the left-most button
in the secondary navigation bar.
Category
TclOO
Commands
oo::meta::infooo::meta::info is intended to work on the metadata of a class in a manner similar to if the
aggregate pieces where assembled into a single dict. The system mimics all of the standard dict
commands, and addes the following:
oo::meta::infobranchget ?key? ?...?
Returns a dict representation of the element at args, but with any trailing : removed from field
names.
::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::infobranchset ?key...? keyvalue
Merges dict with any other information contaned at node ?key...?, and adding a trailing : to all
field names.
::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::infodumpclass
Returns the complete snapshot of a class metadata, as producted by oo::meta::metadataoo::meta::infoclassistype ?args?
Returns a boolean true or false if the element ?args? would match stringistypevalue
::oo::meta::info $myclass set constant mammal 1
puts [::oo::meta::info $myclass is true constant mammal]
> 1
oo::meta::infoclassmerge ?dict? ?dict? ?...?
Combines all of the arguments into a single dict, which is then stored as the new local
representation for this class.
oo::meta::infoclassrebuild
Forces the meta system to destroy any cached representation of a class' metadata before the next
access to oo::meta::metadataoo::meta::metadataclass
Returns an aggregate picture of the metadata for class, combining its local data with the local
data from its ancestors.
oo::definemeta
The package injects a command oo::define::meta which works to provide a class in the process of
definition access to oo::meta::info, but without having to look the name up.
oo::define myclass {
meta set foo bar: baz
}
oo::classmethodmeta
The package injects a new method meta into oo::class which works to provide a class instance
access to oo::meta::info.
oo::objectmethodmeta
The package injects a new method meta into oo::object. oo::object combines the data for its class
(as provided by oo::meta::metadata), with a local variable meta to produce a local picture of
metadata. This method provides the following additional commands:
oo::objectmethodmetacget ?field? ?...? field
Attempts to locate a singlar leaf, and return its value. For single option lookups, this is faster
than mymetagetnull ?field? ?...? field], because it performs a search instead directly instead
of producing the recursive merge product between the class metadata, the local meta variable, and
THEN performing the search.
Concept
The concept behind oo::meta is that each class contributes a snippet of local data. When
oo::meta::metadata is called, the system walks through the linear ancestry produced by
oo::meta::ancestors, and recursively combines all of that local data for all of a class' ancestors into a
single dict. Instances of oo::object can also combine class data with a local dict stored in the meta
variable.
Copyright
Copyright (c) 2015 Sean Woods <yoda@etoyoc.com>
tcllib 0.7.2 oometa(3tcl)
Description
The oo::meta package provides a data registry service for TclOO classes.
Keywords
TOOL, TclOO
Name
oometa - oo::meta A data registry for classess
Synopsis
oo::meta::infooo::meta::infobranchget ?key? ?...?
oo::meta::infobranchset ?key...? keyvalueoo::meta::infodumpclassoo::meta::infoclassistype ?args?
oo::meta::infoclassmerge ?dict? ?dict? ?...?
oo::meta::infoclassrebuildoo::meta::metadataclassoo::definemetaoo::classmethodmetaoo::objectmethodmetaoo::objectmethodmetacget ?field? ?...? field
________________________________________________________________________________________________________________
Usage
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}
