8
f <- function(x) enquo(x)

e <- f()
#<quosure: empty>
#~

这些都不起作用:

> is_empty(e)
[1] FALSE
> is_missing(e)
[1] FALSE
> is_false(e)
[1] FALSE
> is_quosure(e)
[1] TRUE
4

2 回答 2

10

您可以使用quo_is_missing(x),它是 的别名is_missing(quo_get_expr(x))

于 2017-05-25T21:21:15.297 回答
3

检查类的 print 方法quosure表明它获得了“空”属性,如下所示:

rlang:::env_type(get_env(e))
# [1] "empty"

不幸的是,env_type没有导出,函数env_type调用也没有(最终指向 C 函数rlang_is_reference

您可以更直接地 ( TRUE/ FALSE) 获取它:

rlang:::is_reference(get_env(e), empty_env())
# [1] TRUE

打印方法quosure

rlang:::print.quosure
# function (x, ...) 
# {
#     cat(paste0("<quosure: ", env_type(get_env(x)), ">\n"))
#     print(set_attrs(x, NULL))
#     invisible(x)
# }

我不太熟悉可以rlang肯定地说,但这似乎是一种使用导出函数获得所需内容的方法:

identical(get_env(e), empty_env())
# [1] TRUE

虽然我必须遗漏一些东西,因为rlang:::is_reference没有使用identical.

于 2017-05-25T17:04:56.537 回答