SYNOPSIS
package MyMixInClass;
use Rose::Object::MixIn(); # Use empty parentheses here
our @ISA = qw(Rose::Object::MixIn);
__PACKAGE__->export_tag(all => [ qw(my_cool_method my_other_method) ]);
sub my_cool_method { ... }
sub my_other_method { ... }
...
package MyClass;
# Import methods my_cool_method() and my_other_method()
use MyMixInClass qw(:all);
...
package MyOtherClass;
# Import just my_cool_method()
use MyMixInClass qw(my_cool_method);
...
package YetAnotherClass;
# Import just my_cool_method() as cool()
use MyMixInClass { my_cool_method => 'cool' }
DESCRIPTION
Rose::Object::MixIn is a base class for mix-ins. A mix-in is a class that exports methods into another class. This export process is controlled with an Exporter-like interface, but Rose::Object::MixIn does not inherit from Exporter.When you use a Rose::Object::MixIn-derived class, its import method is called at compile time. In other words, this:
use Rose::Object::MixIn 'a', 'b', { c => 'd' };
is the same thing as this:
BEGIN { Rose::Object::MixIn->import('a', 'b', { c => 'd' }) }
To prevent the import method from being run, put empty parentheses ``()'' after the package name instead of a list of arguments.
use Rose::Object::MixIn();
See the synopsis for an example of when this is handy: using Rose::Object::MixIn from within a subclass. Note that the empty parenthesis are important. The following is not equivalent:
# This is not the same thing as the example above! use Rose::Object::MixIn;
See the documentation for the import method below to learn what arguments it accepts.
CLASS METHODS
- import ARGS
-
Import the methods specified by ARGS into the package from which this method was called. If the current class can already perform one of these methods, a fatal error will occur. To override an existing method, you must use the "-force" argument (see below).
Valid formats for ARGS are as follows:
-
-
A method name
Literal method names will be imported as-is.
-
A tag name
Tags names are indicated with a leading colon. For example, ``:all'' specifies the ``all'' tag. A tag is a stand-in for a list of methods. See the export_tag method to learn how to create tags.
-
A reference to a hash
Each key/value pair in this hash contains a method name and the name that it will be imported as. Use this feature to import methods under different names in order to avoid conflicts with existing methods.
-
"-force"
The special literal argument "-force" will cause the specified methods to be imported even if the calling class can already perform one or more of those methods.
-
"-target_class CLASS"
The special literal argument "-target-class" followed by a class name will cause the specified methods to be imported into CLASS rather than into the calling class.
-
A method name
-
See the synopsis for several examples of the import method in action. (Remember, it's called implicitly when you use a Rose::Object::MixIn-derived class with anything other than an empty set of parenthesis ``()'' as an argument.)
-
- clear_export_tags
- Delete the entire list of export tags.
- export_tag NAME [, ARRAYREF]
-
Get or set the list of method names associated with a tag. The tag name should not begin with a colon. If ARRAYREF is passed, then the list of methods associated with the specific tag is set.
Returns a list (in list context) or a reference to an array (in scalar context) of method names. The array reference return value should be treated as read-only. If no such tag exists, and if an ARRAYREF is not passed, then a fatal error will occur.
- export_tags
- Returns a list (in list context) and a reference to an array (in scalar context) containing the complete list of export tags. The array reference return value should be treated as read-only.
AUTHOR
John C. Siracusa ([email protected])LICENSE
Copyright (c) 2010 by John C. Siracusa. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.