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 :(