识别是否提供了命名函数作为函数参数

问题描述

作为我正在从事的项目的一部分,我希望允许用户返回嵌套对象结构的各种输入的摘要。这些对象的一部分用作容器或格式化程序,而其余部分则用于解析其他输入。

基本上,摘要将格式化“名称”,“函数类型/名称”和其他一些描述符。但是我在第二部分“功能类型/名称”上迷了一下。

如何识别是否提供了命名函数类lambda (未命名)函数作为该函数的参数?

解决该问题的一些想法是替换输入(假设它不丢失)并检查输入是name还是call

f <- function(x)
  substitute(x)
class(f(sum))
[1] "name"
class(f(function(x) x**2))
[1] "call"

但这还不完整,因为函数call仍可以视为已命名

f(sum(x))
[1] "call"

以最简单的格式,我正在搜索要返回"named function""unnamed function"搜索已加载的命名空间的函数。例如。 sumsum(x)一个命名函数,而function(x) x**2一个未命名函数

解决方法

如果我正确理解了这个问题,也许下面的内容可以为您做些什么。

f <- function(x){
  flag <- is.function(x)
  y <- as.character(substitute(x))[1]
  if(flag){
    i <- grepl("function",y) + 1L
    c("named function","unnamed function")[i]
  } else {
    #msg <- paste(sQuote(y),"is not a function.")
    #message(msg)
    flag
  }
}

f(sum)
#[1] "named function"
f(sum(x))
#[1] FALSE
f(function(x) x**2)
#[1] "unnamed function"

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...