[Pdx-pm] Poll: traits
chromatic at wgz.org
Sat Nov 19 11:22:41 PST 2005
On Sat, 2005-11-19 at 10:54 -0800, Eric Wilhelm wrote:
> "A trait is essentially a group of pure methods that serves as a
> building block for classes and is a primitive unit of code reuse."
> So, can you spell that in Perl? It sounds suspiciously like it's
> nothing more than a module that allows you to import some methods into
> your namespace. Or is that a mixin?
It's a lot more than a mixin. It's an abstraction that gives a
semantically useful name to a group of methods.
Occasionally people show up in Perl QA to ask "I have these functions
that print their output and I want to collect that output instead!" The
answer is somewhere between select(), tie(), and IO::Handle or another
module. You really have to know what you're doing to make it work.
You also could define a trait for an appendable collection of lines.
That might represent a file (you can print to it) or an array (same) or
a log (if it expires the oldest content) or a cache (the same).
If every place you want to append a line to something you check that
what you're going to use does that trait -- instead of being a
filehandle or an array or however it implements that trait -- you get a
lot more flexibility. In particular, you're checking for the
appropriate *intended behavior* of an object, not its implementation.
Likewise you could have a KeyedLookup trait for a hash or a cache or a
remote object storage system or whatever.
The important thing is the name of the collection of methods. You can't
just check that the object you have has a method of the right name --
there are too many homonyms possible for that to work reliably. It's
the collection of methods under a trait name that makes this useful.
More information about the Pdx-pm-list