如何在不执行它们的情况下识别我的环境中的 activeBindings?

How to identify activeBindings in my environment without executing them?

这里有一个例子 activeBinding:

invisible(makeActiveBinding('newdev', function(...) {library(grDevices); dev.new(width = 5,height=5,restoreConsole=T)},.GlobalEnv))     

我要解决的问题是,当我将它作为参数时,各种函数都会导致它执行。示例包括

class(newdev)   
typeof(newdev)

这两个 return "NULL",但是在 newdev 执行的过程中,创建了不需要的新图形 window。 (这是一个小烦恼;我想使用的其他绑定在错误的时间调用时会执行更多灾难性的操作) 相比之下,ls() returns 包含所有内容的名称,包括元素 "newdev" 而没有执行它。

为了执行各种其他任务,我希望能够执行 "ls(everything_not_a_activeBinding)" 之类的操作来获取我的所有对象 除了 activeBindings 以执行某些操作(例如 save.image()

背景:据我所知,使用 activeBinding 是发出函数调用而无需在函数名称后键入 () 的唯一方法。如果我错过了一些不涉及绑定的明显方法,请告诉我。

使用bindingIsActive:

makeActiveBinding("quux", local({i <- 0; function(...) { message("Hello! ", i); i <<- i + 1L; } }), env = .GlobalEnv)
quux
# Hello! 0
quux
# Hello! 1
class(quux)
# Hello! 2
# [1] "numeric"
sapply(ls(), bindingIsActive, .GlobalEnv)
#                quux some_magic_function 
#                TRUE               FALSE 
Filter(function(x) !bindingIsActive(x, env = .GlobalEnv), ls())
# [1] "some_magic_function"