我确定这是我的误解,因为我不是真正的R程序员...
我的代码在这里:https://gist.github.com/bnsh/3839c4eb2c6b31e32c39ec312014b2b8
#! /usr/bin/env Rscript
library(R6)
Cloaked <- R6::R6Class("Cloaked",
public = list(
msg = function() {
return(paste(
"this code _works_, but lintr (https://github.com/jimhester/lintr)",
"complains that cloak_class.R:19:8: warning: no visible binding for",
"global variable ‘Cloaked’ when I try to use Cloaked within a",
"function. It's fine tho, if I use it _outside_ a function."
))
}
)
)
main <- function() {
c <- Cloaked$new()
c$msg()
}
main()
它有效...但是,lintr抱怨道:“ cloak_class.R:19:8:警告:全局变量'Cloaked'没有可见的绑定”
实际上,这与课程无关,因为这也会引起抱怨:
#! /usr/bin/env Rscript
cloaked <- function() {
return(paste(
"this code _works_, but lintr (https://github.com/jimhester/lintr)",
"complains that cloak_function.R:13:3: warning: no visible global",
"function definition for ‘cloaked’ when I try to use cloaked within",
"a function. It's fine tho, if I use it _outside_ a function."
))
}
main <- function() {
cloaked()
}
main()
此代码也可以运行,但是lintr说: cloak_function.R:13:3:警告:“隐藏的”没有可见的全局函数定义
为什么? 做一个诸如# nolint start
/ # nolint end
之类的钝工具会简短,我该怎么做才能满足lintr的要求?
谢谢!
答案 0 :(得分:0)
我刚开始使用lintr,遇到了同样的问题。看来是个错误。
https://github.com/REditorSupport/atom-ide-r/issues/7 和实际问题 https://github.com/jimhester/lintr/issues/27
目前唯一的解决方法(不足以修复lintr中的错误)是禁用对象linter(这不是很理想,因为它不会捕获这种形式的真正错误)。例如
with_defaults(object_usage_linter=NULL)
(我认为对象用法lint不是用于脚本,而是用于程序包,据我所知,要工作,它将评估整个脚本(!),以查看定义了什么全局变量。对于程序包,其中R文件都是很好的函数定义,但是对于脚本,您真的不想每次都在文件中都运行整个脚本)