Skip to content

Changes to correct problems with classes in namespaces

3 messages · Brian Ripley, John Chambers

#
An extensive set of changes to the methods package has been committed
today to allow non-exported classes from packages with namespaces (and
some related fixes in dealing with generic functions from namespaces as
well).

The namespace mechanism requires packages to export any class
definitions that are part of the API.  Unfortunately, NOT exporting
classes has never really worked.

The problem was essentially that computations such as method dispatch
used the character-string name of a class, with no information about
where that class came from.  For non-exported classes, this caused many
computations down the line to fail.  Related problems came from not
using the generic function objects and the class definition objects.

The modified code passes the usual check and check-devel tests, plus
some tests for dealing with private classes, but if you have packages
that use methods extensively, please try these with the current r-devel
as soon as possible.

John
#
John,

Looks like several packages are failing to dump or load with messages like
(SparseM)

Error in warning("Undefined slot classes in definition of \"",
classDef@className,  :
        Object "classDef" not found

So far I have seen this with SparseM, dynamicGraph (and hence deal and
gRbase).  Should that be `ClassDef'?  And is this a new error detected?

Brian
On Tue, 24 Aug 2004, John Chambers wrote:

            

  
    
#
Prof Brian Ripley wrote:
It should.  Thanks.
You mean a new test?  Yes, there's a sufficient chance of a typo-- that
the user didn't really mean to insert an undefined class as a slot --
that a warning (not an errorr) seems desirable.  (S3 classes are fine as
slots, but unless setOldClass  is used they can't be verified.)

John