<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">sourceCpp knows how to deal with modules, i.e.: <div class=""><br class=""></div><div class=""><div class="">inc <- '</div><div class="">#include <Rcpp.h></div><div class="">using namespace Rcpp;</div><div class="">double norm( double x, double y ) {</div><div class="">    return sqrt( x*x + y*y );</div><div class="">}</div><div class="">RCPP_MODULE(mod) {</div><div class="">    function( "norm", &norm ); </div><div class="">}'</div><div class="">sourceCpp( code = inc )</div><div class=""><br class=""></div><div class="">giving: </div><div class=""><br class=""></div><div class=""><div class="">> norm( 3, 3 )</div><div class="">[1] 4.242641</div></div><div class=""><br class=""></div><div class="">Romain</div><div class=""><br class=""></div><div><blockquote type="cite" class=""><div class="">Le 19 nov. 2014 à 05:49, Aaron Polhamus <<a href="mailto:aaronpolhamus@gmail.com" class="">aaronpolhamus@gmail.com</a>> a écrit :</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class="gmail_default" style="font-family:georgia,serif;font-size:small">Dear list, </div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br class=""></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small">In the process of writing a comprehensive unit testing application for Rcpp I may have come across a bug in the code. It seems to me that the following block should execute just fine, exporting the C++ class "norm" to the global environment: </div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><br class=""></div><div class="gmail_default" style="font-size:small"><font face="monospace" class="">require(inline)</font></div><div class="gmail_default" style="font-size:small"><font face="monospace" class="">require(Rcpp) </font></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small"><span style="font-family:monospace" class=""><br class=""></span></div><div class="gmail_default" style=""><div class="gmail_default" style=""><font face="monospace" class="">inc <- '</font></div><div class="gmail_default" style=""><font face="monospace" class="">using namespace Rcpp;</font></div><div class="gmail_default" style=""><font face="monospace" class="">double norm( double x, double y ) {</font></div><div class="gmail_default" style=""><font face="monospace" class="">    return sqrt( x*x + y*y );</font></div><div class="gmail_default" style=""><font face="monospace" class="">}</font></div><div class="gmail_default" style=""><font face="monospace" class="">RCPP_MODULE(mod) {</font></div><div class="gmail_default" style=""><font face="monospace" class="">    function( "norm", &norm ); </font></div><div class="gmail_default" style=""><font face="monospace" class="">}'</font></div><div class="gmail_default" style=""><font face="monospace" class=""><br class=""></font></div><div class="gmail_default" style=""><font face="monospace" class="">fx <- cxxfunction(signature(), plugin="Rcpp", include=inc)</font></div><div class="gmail_default" style=""><font face="monospace" class="">mod <- Module("mod", getDynLib(fx))</font></div><div class="gmail_default" style=""><font face="monospace" class="">  </font></div><div class="gmail_default" style=""><font face="monospace" class="">loadRcppClass('norm', 'norm', mod)<br class=""></font></div></div><div class=""><br class=""></div><div class=""><span style="font-family:georgia,serif" class=""><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline">Wh​at happens, though, is that the following error is returned: </div></span><br class=""></div><div class=""><span style="font-family:georgia,serif" class=""><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline"><br class=""></div></span></div><div class=""><div class="gmail_default" style="display:inline"><font face="monospace" class=""><div class="">Error in as.environment(pos) : </div><div class="">  no item called "moduleName" on the search list</div></font></div></div><div class=""><br class=""></div><div class=""><font face="georgia, serif" class="">D</font><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline">​igging in to </div><div class="gmail_default" style="font-size:small;display:inline"><font face="monospace" class="">loadRcppClass</font></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline">, I find that the function fails at the line: </div></div><div class=""><font face="georgia, serif" class=""><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline"><br class=""></div></font></div><div class=""><font face="monospace" class="">mod <- loadModule(module, NULL, env = where, loadNow = TRUE)</font></div><div class=""><font face="georgia, serif" class=""><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline">​</div></font></div><div class=""><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline">Entering </div><div class="gmail_default" style="font-size:small;display:inline"><font face="monospace" class="">loadModule</font></div><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline">, the function fails here, at the "get" statement: </div></div><div class=""><span style="font-family:georgia,serif" class=""><br class=""></span></div><div class=""><font face="monospace" class="">loadM <- as.environment(module)<br class=""></font></div><div class=""><div class="gmail_default" style="display:inline"><div style="" class=""><font face="monospace" class="">module <- get(loadM, "moduleName")</font></div></div></div><div class=""><font face="georgia, serif" class=""><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline"><br class=""></div></font></div><div class=""><font face="georgia, serif" class=""><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline">Isn't this backward? get syntax is:</div></font></div><div class=""><font face="georgia, serif" class=""><div class="gmail_default" style="font-family:georgia,serif;font-size:small;display:inline"><br class=""></div></font></div><div class=""><div class="gmail_default" style="display:inline"><div class=""><font face="monospace" class="">get(x, pos = -1, envir = as.environment(pos), mode = "any",</font></div><div class=""><font face="monospace" class="">    inherits = TRUE)</font></div><div style="font-family:georgia,serif" class=""><br class=""></div><div class=""><span style="font-family:georgia,serif" class="">Where "</span><font face="monospace" class="">x</font><font face="georgia, serif" class="">" is the object sought in the specified environment. In this case, the function is failing because it can't find </font><font face="monospace" class="">moduleName</font><font face="georgia, serif" class=""> in the environment's search list, but the reason for this seems to be that the current statement is search for an environment within a character string, rather than a character string representing a named object within an environment. </font></div><div style="font-family:georgia,serif" class=""><br class=""></div><div style="font-family:georgia,serif" class="">Is this in need of a patch, or am I missing something obvious? </div><div style="font-family:georgia,serif" class=""><br class=""></div><div style="font-family:georgia,serif" class="">Cheers, <br class="">Aaron </div><div style="font-family:georgia,serif" class=""><br class=""></div></div></div>
</div>
_______________________________________________<br class="">Rcpp-devel mailing list<br class=""><a href="mailto:Rcpp-devel@lists.r-forge.r-project.org" class="">Rcpp-devel@lists.r-forge.r-project.org</a><br class="">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel</div></blockquote></div><br class=""></div></body></html>