Hi Moosers,

I have a load of very similar methods to implement and I'm sure that there must be a better way to do it than I'm doing at present.

I have a Graph object to which you can attach Statement objects; these Statements get stored in StatementIndex objects. There are a number of different subclasses of Statement, and these can be stored in separate named StatementIndexes. The Graph object has an attribute 'statement_index_h', a hash with the StatementIndex names as keys and the index objects as values, i.e.

has 'statement_index_h' => ( is=>'rw', isa=>'HashRef[StatementIndex]', default=>{...});

The StatementIndexes can be accessed using $graph- >get_index_by_name($name).

The StatementIndexes themselves have methods such as 'statements' (getter/setter), 'add_statement', 'remove_statement', 'clear_all_statements', and various others.

Most instantiations of the Graph object will have four specific sets of statements to be grouped together, so these four StatementIndex objects are created by default; other indexes can be added if required. These four sets are used frequently enough that they have their own methods to access them, which mirror the methods provided by the StatementIndex object; for example, one StatementIndex is called 'edges', and to manipulate it, you use methods such as $graph->edges, $graph->add_edge, $graph->clear_all_edges, etc.. Analogous methods would be available for the three other default StatementIndex objects.

At the moment, for a method like $graph->add_edge, the method does $graph->get_index_by_name('edge') to get the index, followed by $index- >add_statement. I thus have a whole load of very short subs to implement the desired methods. I'm sure there must be a better way of doing it than this... I thought that I could do something involving delegation, but I couldn't get my implementation to work (not sure if that was just my code, tho). Another thought was to use a method modifier that would parse the name of the subroutine (using Sub::Identify), extract the name of the index to fetch, and then call the appropriate 'xxx_statements' on the fetched index.

Can anyone suggest a good way to do this? I feel there should be an easy way to do this kind of thing!

Thank you in advance for any help... it's much appreciated!

Amelia.

Reply via email to