Dear list,

This probably makes perfect sense from the language designers' 
perspective, but at least for me this was/is quite an interesting and 
unexpected behavior which I thought might be worth sharing:

The default value of argument |where|in function |getClasses()|seems to 
vary depending on whether |getClasses()|is called inside a *standard R 
function*or a *formal S4 method*. It is controlled by 
|.externalCallerEnv()|, which seems to be "vulnerable" to /lazy 
evaluation/and/or an "altered" /lexical scoping/structure (possible 
introduced by the definition of a formals S4 method?) and thus causes 
the variation**.

I found it quite hard to understand what's exactly going on as you need 
to manually debug `getClasses()` in order to find out what the default 
value of `where` (controlled by `|.externalCallerEnv()`) actually is in 
the various settings|. But that of course might as well be just me ;-)

For those interested, I tried to illustrate the behavior in this SO post:
http://stackoverflow.com/questions/12166645/ambiguous-variation-of-default-environment-in-getclasses-standard-function/12174390#12174390

Best regards,
Janko Thyson



        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to