On 5/8/07, Christopher H. Laco <[EMAIL PROTECTED]> wrote:
> For the sake of me not forgetting this later...
> CAG would use 'inherited' as the storage for component classes...
>
> This leads me to believe that get/set_inherited are wrong when used in
> DBIC because CAG uses standard ISA, and everything in DBIC is C3.
>
> Assuming that's correct, I'll take a crack ad a CAG::C3...which in
> theory is simply the same as CAG with get_super_paths overridden to use
> caculateMRO()....
>
> ?

Or, am I overthinking this. C3 just changes the ISA orders right? So, if
it's done by the time I need to surf ISA...does it matter?


It does matter.  get_super_path implicitly uses depth-first-search
instead of C3.  The "right" answer in 5.9.5+ is to use
mro::get_linear_isa($class), which honors C3 ordering when
appropriate.  The mro.pm in 5.9.5 was intentionally given a 1.x
version number so that I could then public 0.x versions on CPAN to
offer some backwards-compat-ish interfaces.  In CPAN mro.pm,
get_linear_isa could be implemented by looking at whether
$Class::C3::MRO exists and the class is defined there, etc.

So I guess what I'm saying is that CAG and other modules that like to
walk the @ISA tree manually should be doing "use mro; my
@ordered_classes_to_search = mro::get_linear_isa($class)", but I
haven't gotten around to publishing mro.pm on CPAN for pre5.9.5 perls.

-- Brandon

_______________________________________________
List: http://lists.rawmode.org/cgi-bin/mailman/listinfo/dbix-class
Wiki: http://dbix-class.shadowcatsystems.co.uk/
IRC: irc.perl.org#dbix-class
SVN: http://dev.catalyst.perl.org/repos/bast/trunk/DBIx-Class/
Searchable Archive: http://www.mail-archive.com/[email protected]/

Reply via email to