Thanks Chris you lighted my lantern about differences between Moose and BioPerl behaviors. Great!

Emmanuel



Le 5 mars 2010 à 17:55, Chris Fields <[email protected]> a écrit :


On Mar 5, 2010, at 10:35 AM, Emmanuel Quevillon wrote:

Hi Chris,

I know you're a core dev;)
Well not a wrapper I'm just extending restriction::analysis and wanted to do it with moose. But apparently it is much difficult than expected. Moreover I'm nit really comfortable with moose, I must admit I don't understand all the concepts :(. I didn't realize 'rearrange' would break moose. But anyway it looks like even the subs around moose'new methods are not called. It is really obscure for me at this time.

It's not that it breaks moose (or vice versa). BioPerl has a specific named argument syntax and related methods that are problematic when mixed with Moose; in BioPerl all named arguments in bioperl start with '-' to distinguish them from simple positional arguments. With Moose OTOH, I think everything is treated as named by default in the constructor (e.g. no '-' needed), but the behavior can be overridden with BUILDARGS (please correct me if I'm wrong moose illuminati).

Regardless I'm pretty sure _rearrange() doesn't work w/o '-', so I could definitely foresee some problems here going back and forth between Moose and BioPerl without doing some work in BUILDARGS.

Either I'll stay with the current biopel code structure or if someone has an explanation....

I wouldn't want to dissuade you from using Moose; I'm using it extensively in non-bioperl-based work, along with DBIx::Class. Hence the reason I'm writing up a library of Moose-based BioPerl classes.

Anyway, I suggest MooseX::NonMoose (I see Stevan and Jesse have already responded likewise) and going from there.

Anyway thanks for your helps

Emmanuel

np.

chris

Le 5 mars 2010 à 16:53, Chris Fields <[email protected]> a écr it :

Emmanuel,

Are you trying to wrap bioperl modules? The use of $self- >_rearrange()
gives it away, not to mention the 'so:xxxxx' (sequence ontology).

You should probably use delegation, or something like MooseX::NonMoose; bioperl's class structure has issues (believe me, I'm a core dev for the
project).

chris

(PS: FWIW, I'm rewriting some of the core modules in Moose but they need
serious work)

On Fri, 2010-03-05 at 15:49 +0100, Emmanuel Quevillon wrote:
Stevan Little wrote:

On Mar 5, 2010, at 9:06 AM, Emmanuel Quevillon wrote:
Joel Bernstein wrote:
On 5 Mar 2010, at 13:37, Emmanuel Quevillon wrote:
By the way, I use a self coded 'new' method to create my object.
Would it be the problem?

Yes. But you omitted the code that doesn't work, so... Good luck!

/joel

oops sorry,

sub new {

my($class, %args) = @_;

my $self = $class->SUPER::new(%args);

$self->_init(%args);
$self->_build_types(%args);
return $self;
}

Later in the code is try $self->so_type(), nothing is returned...

Honestly, this should work, however you very well might be doing
something in _init or _build_types that causes the problem. Perhaps
showing us some more code would help.

You might also try changing your "new" to this:

sub BUILD {
my($self, $args) = @_;
$self->_init(%$args);
$self->_build_types(%$args);
}

.. which is a little more Moosey.

- stevan

I tried without success :

Here are the methods :

sub BUILD {

 my($self, $args) = @_;

 $self->_init(%$args);
 $self->_build_types(%$args);

}


sub _init {

 my($self, %args) = @_;

 my($output, $cut_type, $format, $style) =
     $self->_rearrange([qw/OUTPUT CUT_TYPES FORMAT STYLE/], %args);

 $format   && $self->_set_format   (lc($format));
 $cut_type && $self->_set_cut_types($cut_type);
 $self->_set_style (lc($style) || 'text');
 $self->_set_output($output);

 return $self;
}

sub _build_types {

 my($self, %args) = @_;

 $self->{_types} = [ ];

 foreach my $type (sort { $a cmp $b } @{$self->cut_types()}){
     $type = lc($type);
     my $obj = "Bio::Restriction::Analysis::FramedCut::$type";
     $self->add_type($obj->new(%args));
 }

 return;
}

If I put some print into these method, nothing is printed out on my
screen. Looks like there are not called at all. :(

I'm really lost :(




Le 5 mars 2010 à 16:53, Chris Fields <[email protected]> a écr it :

Emmanuel,

Are you trying to wrap bioperl modules? The use of $self- >_rearrange()
gives it away, not to mention the 'so:xxxxx' (sequence ontology).

You should probably use delegation, or something like MooseX::NonMoose; bioperl's class structure has issues (believe me, I'm a core dev for the
project).

chris

(PS: FWIW, I'm rewriting some of the core modules in Moose but they need
serious work)

On Fri, 2010-03-05 at 15:49 +0100, Emmanuel Quevillon wrote:
Stevan Little wrote:

On Mar 5, 2010, at 9:06 AM, Emmanuel Quevillon wrote:
Joel Bernstein wrote:
On 5 Mar 2010, at 13:37, Emmanuel Quevillon wrote:
By the way, I use a self coded 'new' method to create my object.
Would it be the problem?

Yes. But you omitted the code that doesn't work, so... Good luck!

/joel

oops sorry,

sub new {

my($class, %args) = @_;

my $self = $class->SUPER::new(%args);

$self->_init(%args);
$self->_build_types(%args);
return $self;
}

Later in the code is try $self->so_type(), nothing is returned...

Honestly, this should work, however you very well might be doing
something in _init or _build_types that causes the problem. Perhaps
showing us some more code would help.

You might also try changing your "new" to this:

sub BUILD {
my($self, $args) = @_;
$self->_init(%$args);
$self->_build_types(%$args);
}

.. which is a little more Moosey.

- stevan

I tried without success :

Here are the methods :

sub BUILD {

 my($self, $args) = @_;

 $self->_init(%$args);
 $self->_build_types(%$args);

}


sub _init {

 my($self, %args) = @_;

 my($output, $cut_type, $format, $style) =
     $self->_rearrange([qw/OUTPUT CUT_TYPES FORMAT STYLE/], %args);

 $format   && $self->_set_format   (lc($format));
 $cut_type && $self->_set_cut_types($cut_type);
 $self->_set_style (lc($style) || 'text');
 $self->_set_output($output);

 return $self;
}

sub _build_types {

 my($self, %args) = @_;

 $self->{_types} = [ ];

 foreach my $type (sort { $a cmp $b } @{$self->cut_types()}){
     $type = lc($type);
     my $obj = "Bio::Restriction::Analysis::FramedCut::$type";
     $self->add_type($obj->new(%args));
 }

 return;
}

If I put some print into these method, nothing is printed out on my
screen. Looks like there are not called at all. :(

I'm really lost :(




Reply via email to