| flail documentation | view source | Contained in the flail distribution. |
Flail::Thing - A structured thing
Time-stamp: <2006-12-01 16:35:16 attila@stalphonsos.com> $Id: Thing.pm,v 1.3 2006/04/26 03:52:03 attila Exp $
package Something;
use base qw(Flail::Thing);
sub _struct {
return shift->SUPER::_struct,
( my_field_1 => default_value,
my_field_2 => default_value, );
}
package main;
my $obj = Something->new(my_field_1 => 1, my_field_2 => 'blah');
print $obj->as_string."\n"; ## can turn them into strings
print $obj->my_field_2."\n"; ## print the value of a field
$obj->my_field_1(3); ## set my_field_1 to 3
sub terlet {
my($obj,@changes) = @_;
while (@changes) {
my($name,$val) = splice(@changes,0,2);
print "$obj $name => $val\n";
}
return undef;
}
$obj->FLUSH(\&terlet); ## will be called with: my_field_1 => 3
This is a generic thing. It has slots. Slots can contain other things, but swizzling and unswizzling don't happen automagically.
It is derived from a class I wrote a long time ago called just plain old Thing. I am pulling it into Flail starting in version 0.2.0.
Things can have options. Options are not slots, they are used to
specify optional attributes of an object regardless of its particular
structure or behavior. For instance, the autoflush attribute can
be used to tell the DESTROY method in Thing whether or not to
flush changes to an object that is being garbage-collected by the Perl
interpreter.
Return a human-readable string that represents this object.
Perform some arbitrary "evaluation" function as per the semantics of the object.
Invoke the callback function with $self, and one $attr =>
$val pair. Each invocation represents one state change that has
not yet been stored presistently. The callback's job is to store this
state change, in whatever way makes sense for the object.
Invoked to load state from whatever persistent store this object uses. We are passed a list of slots that are missing.
Check optional attributes for this object, or set them.
Sean Levy <snl@cluefactory.com>
(C) 2002-2006 by Sean Levy <snl@cluefactory.com>. all rights reserved.
This code is released under a BSD license. Please see the LICENSE file that came with the source distribution or visit http://flail.org/LICENSE
| flail documentation | view source | Contained in the flail distribution. |