On Wed, Dec 2, 2009 at 11:11 PM, Romain Francois <romain.franc...@dbmail.com > wrote:
> On 12/03/2009 12:17 AM, Michael Lawrence wrote: > >> >> >> On Thu, Nov 19, 2009 at 10:54 AM, Romain Francois >> <romain.franc...@dbmail.com <mailto:romain.franc...@dbmail.com>> wrote: >> >> On 11/19/2009 06:14 PM, Michael Lawrence wrote: >> >> >> >> On Thu, Nov 5, 2009 at 9:58 AM, Romain Francois >> <romain.franc...@dbmail.com <mailto:romain.franc...@dbmail.com> >> <mailto:romain.franc...@dbmail.com >> <mailto:romain.franc...@dbmail.com>>> wrote: >> >> Hello, >> >> Is it possible to have the effect of UserDefinedDatabase >> outside of >> "attached" environments ? Can I disguise an environment of the >> sys.frames() as a UserDefinedDatabase ? >> >> This seems to suggest that it might be possible : >> >> > f <- function(){ e <- environment(); class(e) <- >> "UserDefinedDatabase"; ff } >> > f() >> >> >> The UserDefinedDatabase support expects an R_ObjectTable C >> structure >> embedded within an externalptr as the HASHTAB of the environment. >> So >> it's really only possible from C. >> >> >> Sure. Too bad both environments and user defined database use >> HASHTAB with completely different meanings. >> >> What I would want is something like this: >> >> f <- function(){ >> attachLocally( getSomeUserDefinedDatabaseFromC() ) >> HELLO >> } >> >> and the variable associated with the binding "HELLO" would come >> dynamically from the user defined database. >> >> >> A more concrete example : rJava now has javaImport, that combined >> with attach allows dynamic lookup for class names within a set of >> imported java package paths: >> >> attach( javaImport( "java.util" ), name = "java:java.util" ) >> v <- new( Vector ) >> m <- new( HashMap ) >> >> This is nice, but then as usual with attach, you forget to detach, >> ... this question is about to find a way to have this instead: >> >> f <- function(){ >> import( "java.util" ) >> v <- new( Vector ) >> v$add( 1 ) >> v >> } >> >> where the "java.util" is no more looked up when f returns. >> >> >> >> Probably no clean way to accomplish that. But you could always use >> with() if you can get that Java package as an environment. >> > > Thanks for keeping this live. This would work if there was a way to > enumerate classes from a java package, which is not always possible because > of the flexibility of the java class loader mechanism. You can for example > quite easily create a class loader that generates an infinity of classes ... > > But wouldn't the environment be a user database and thus robust to such changes? In qtbase, class objects and instance objects are user-defined databases. R users can add methods to R extensions of C++ classes, and the instances all are kept in sync. Romain > > > Or use >> environment<-() to enclose your function in it. That's actually fairly >> Java-like, as normally the import has file scope and your classes are >> enclosed within that file. >> >> Michael >> > > > -- > Romain Francois > Professional R Enthusiast > +33(0) 6 28 91 30 30 > http://romainfrancois.blog.free.fr > |- http://tr.im/Gq7i : ohloh > |- http://tr.im/FtUu : new package : highlight > `- http://tr.im/EAD5 : LondonR slides > > [[alternative HTML version deleted]] ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel