[Bioperl-l] Bio::RangeI::union
Chris Mungall
cjm at fruitfly.org
Thu Jun 9 14:45:48 EDT 2005
The pod docs for union() state that this is is valid:
my $newrange = Bio::RangeI->union(@ranges);
In the subroutine body, this gets called:
my $self = shift;
...
$self->new(...)
Since $self is equal to the string "Bio::RangeI", rather than an object
implementing this interface, this will result in a call to
Bio::Root::RootI->new("Bio::RangeI",...)
This works fine in bp1.4, but in recent bioperl revisions this results in
a warning message that Bio::Root::RootI->new is deprecated, and a
delegation to Bio::Root::Root, **omitting the name of the class to be
created**, thus creating a Bio::Root::Root object, which is useless and
will inevitably break any code calling the union() method.
I think this delegation is completely wrong, and should be removed, and
the warning message switched to an error; OR it should be undeprecated and
the original behaviour behaviour restored
If we decide that RootI->new is truly deprecated, then Bio::RangeI should
have to do some $self examination, and use the correct object
instantiation method, rather than $self->new. I don't really know what the
correct object instantiation method is - perhaps just Bio::Range->new()?
Or should a factory be used?
Personally, I would prefer it if Bio::RootI->new were undeprecated and the
original behaviour restored. deprecating would make perfect sense if
bioperl interfaces really were interfaces, which they are not.
Cheers
Chris
More information about the Bioperl-l
mailing list