Using .Call appears to force the promise:<br><br>msg="old"<br>delayedAssign("x",msg)<br>msg="new"<br>.Call('sexpType',x) # promise triggered here, returns 16<br>msg="even newer" # will not change already fired promise<br>
.Call('sexpType',x) # returns 16<br>y = x<br>y # "new" (not "even newer")<br><br>Here's sexpType:<br><br>RcppExport SEXP sexpType(SEXP x_) {<br> return Rcpp::wrap(TYPEOF(x_));<br>}<br><br>
The type returned is 16 here (STRSXP). If numbers were<br>assigned to msg instead 14 would be returned (REALSXP).<br><br><div class="gmail_quote">On Fri, Dec 24, 2010 at 10:39 PM, Gabor Grothendieck <span dir="ltr"><<a href="mailto:ggrothendieck@gmail.com">ggrothendieck@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div class="im">On Fri, Dec 24, 2010 at 8:10 PM, Gabor Grothendieck<br>
<<a href="mailto:ggrothendieck@gmail.com">ggrothendieck@gmail.com</a>> wrote:<br>
> How do I fix this so it works? The code is intended to return TRUE or<br>
> FALSE according to whether the variable with name nm in environment<br>
> env is a promise or not. In the example code below it returns FALSE<br>
> but I would like it to return TRUE. Is the promise being forced<br>
> somewhere along the way? Some other problem?<br>
><br>
> library(Rcpp)<br>
> f <- cxxfunction(signature(env="environment", nm = "character"),<br>
> body=' Environment e(env);<br>
> std::string s = as<std::string>(nm);<br>
> return wrap(TYPEOF (e[s]) == PROMSXP); ',<br>
> plugin="Rcpp")<br>
><br>
> # create promise<br>
> delayedAssign("prom", 3)<br>
><br>
> # want it to return TRUE but it returns FALSE<br>
> f(.GlobalEnv, "prom")<br>
<br>
</div>Or perhaps this is closer but it still does not work as intended:<br>
<br>
library(Rcpp)<br>
library(inline)<br>
f <- cxxfunction(signature(s="SEXP"),<br>
body=' return wrap(TYPEOF(s));',<br>
plugin="Rcpp")<br>
<br>
f(f) # 3<br>
# note that promises are type 5 but we get:<br>
delayedAssign("prom", 3)<br>
f(prom) # 14<br>
<div><div></div><div class="h5"><br>
<br>
--<br>
Statistics & Software Consulting<br>
GKX Group, GKX Associates Inc.<br>
tel: 1-877-GKX-GROUP<br>
email: ggrothendieck at <a href="http://gmail.com" target="_blank">gmail.com</a><br>
_______________________________________________<br>
Rcpp-devel mailing list<br>
<a href="mailto:Rcpp-devel@lists.r-forge.r-project.org">Rcpp-devel@lists.r-forge.r-project.org</a><br>
<a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel</a><br>
</div></div></blockquote></div><br>