R的源文件充满了对PROTECT()
和UNPROTECT()
宏的调用,这些宏扩展然后从垃圾收集中撤消对R对象的保护。 (例如,参见Hadley Wickham先生R的this section,讨论他们的角色。)
我已经找到了R的资料来找到那些可能被定义的地方,但还没有走得太远。 grep'ing src
的{{1}}目录找到了我these lines in src/include/Rinternals.h
:
#define PROTECT
然后我grep /* Pointer Protection and Unprotection */
#define PROTECT(s) Rf_protect(s)
#define UNPROTECT(n) Rf_unprotect(n)
#define UNPROTECT_PTR(s) Rf_unprotect_ptr(s)
来了解定义 it 的位置,然后陷入死胡同。它只在同一个文件中出现(4次),并且它们都没有给我一个关于它的价值的线索。
显然我缺少一些基本的东西。它是什么和/或我应该在哪里查看调用Rf_protect
的代码扩展到什么代码?