Class::MakeMethods::Docs::ToDo - Ideas, problems, and suggestions |
Class::MakeMethods::Docs::ToDo - Ideas, problems, and suggestions
There are lots of things that could be done to improve this module.
Issues about the distribution and supporting files, rather than the code:
UPDATE: There now seem to be fixes for this which should be integrated: See the new Sub::Name module and http://perlmonks.org/index.pl?node_id=304883
For scalar methods (and others) it would be nice to have a simple bounds-checking interface to approve or reject (with an exception) new values that were passed in.As pointed out by Terrence Brannon, the right interface to adopt is probably that of Attribute::Types:
use Class::MakeMethods::Standard::Hash ( 'scalar' => [ 'count' => { TYPE => 'INTEGER' } ], 'scalar' => [ 'name' => { TYPE => qr/^[A-Z]\w*$/ } ], 'scalar' => [ 'account' => { TYPE => &checksum_account_number } ] );Improve use of _diagnostic hooks for debugging. Add various ``(Q)'' debug diagnostics. Finish building Inheritable array and object accessors. Finish building Composite::* packages. Resolve DESTROY-time issues with Standard::Inheritable, Composite::Inheritable, and Template::InsideOut. Add slice and splice functionality to Standard::*:hash and Composite::*:hash.
class
attribute is not set.
(Suggested in Jan-01 NY Perl Seminar discussion.)
Standardize naming templates for array, hash, other method types.
Deprecate verb_x methods? Or at last make them consistently available both ways.
Make list methods consistent with hash_of_lists methods, in action, and in name (x_verb). Also for others (e.g., set_ clear_ boolean)
Should default object template provide auto-create behavior on ->get()? Generalize the ``Generic:scalar -init_and_get'' interface to support memoizing values for other accessor types. Consider adding hash each and array iterator methods, using a closure to provide iteration. Add support for tied arrays & scalars, a la tiedhash Add string_multiple_index. Extend index methods to support weak indexes with WeakRef. Perhaps just have it accept a hash ref to use as the index, and then allow people to pass in tied hashes? Maybe make private or protected method croak if they were called by a method_init method which was called by an outside package.Not entirely clear what the right semantics or security precautions are here...
Need to work out how to capture changes for non-scalar values. For example, if a subclass inherits an array accessor and then pops it, is there some way to provide them with copy-on-write?
Add enumerated string/number type.Provide helper methods with map of associated values (ex $o->port = 80 ... $o->port_readable eq 'HTTP' ). Cf. code for earlier unpublished 'lookup' method type.
For StructBuiltin:Add -fatal flag to die if core func returns false / undef Add call method to recall method with alternative arguments. Add -nocall flag to not call core func on new.
Replace ClassName:static_hash_classname with Class:indexed_string.
Provide mechanism for pre-generating these at install time.
Perhaps load these via do, rather than open/read/eval?
Perhaps pre-generate expanded libs with all of the -imports resolved?
Support generating code files and loading them as needed.This would be similar to Class::Classgen, except that we'd do the generation at run-time the first time it was required, rather than in a separate pass.
For example, given the following declaration:
package Foo::Bar; Class::MakeMethods::Template::Hash->import(-codecache=>'auto', scalar=>'foo');
We should be able to write out the following file:
cat 'auto/Foo/Bar/methods-line-2.pl' # NOTE: Generated for Foo::Bar by the Class::MakeMethods module. # Changes made here will be lost when Foo::Bar is modified. package Foo::Bar; sub foo { my $self = shift; if ( scalar @_ ) { $self->{'foo'} = shift(); } $self->{'foo'} }
Then on subsequent uses, we can just re-load the generated code:
require "auto/Foo/Bar/methods-line-2.pl";
To do this, we need to:
See the Class::MakeMethods manpage for general information about this distribution.
Class::MakeMethods::Docs::ToDo - Ideas, problems, and suggestions |