代码之家  ›  专栏  ›  技术社区  ›  friedo

在Moose中处理多个继承构造函数

  •  6
  • friedo  · 技术社区  · 16 年前

    Moose 我正试着写一篇 CGI::Application

    setup

    use MooseX::Declare;
    
    class MyApp::CGI 
    extends Moose::Object
    extends CGI::Application { 
    
        method setup { 
            $self->start_mode( 'main' );
    
            my @methods = map { $_->name } $self->meta->get_all_methods;
    
            $self->run_modes( map  { /^rm_(.+)$/  => $_ }
                              grep { /^rm_/ }
                              @methods
                            );
        }
    
    }
    

    use MooseX::Declare;
    
    class MyApp::CGI::Login 
    extends MyApp::CGI { 
        method rm_main { 
            return "it works";
        }
    }
    

    Moose::Object

    around new { 
        $self = $orig->( @_ );
        $self->CGI::Application::new( @_ );
    }
    

    Can't call method "BUILDARGS" on unblessed reference at ...Moose/Object.pm line 21.
    

    1 回复  |  直到 16 年前
        1
  •  9
  •   Perleone    13 年前

    你已经看过了吗 Moose::Cookbook::Basics::DateTime_ExtendingNonMooseParent MooseX::NonMoose ?

    MooseX::Declare MooseX::NonMoose

    package My::App;
    
    use Moose;
    use MooseX::NonMoose;
    extends 'CGI::Application';
    
    sub setup {
        my $self = shift;
        $self->start_mode( 'main' );
    
        $self->run_modes(
            map { $_ = $_->name;
                  /^rm_ (?<rm>.+) $/x ? ( $+{rm} => $_ ) : ()
            } $self->meta->get_all_methods
        );
    }
    
    "My::App"
    

    package My::Login;
    use Moose;
    extends 'My::App';
    
    sub rm_main { 'it works!' }
    
    "My::Login"
    

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    
    # For testing on the command line
    use FindBin qw( $Bin );
    use lib $Bin;
    
    use My::Login;
    
    my $app = My::Login->new;
    
    $app->run;
    

    C:\Temp\f> t
    Content-Type: text/html; charset=ISO-8859-1
    
    it works!
    
    推荐文章