Rubocop报错W: Lint/Void: <<-DOC空上下文使用问题咨询
解决Rubocop的Lint/Void错误:Literal <<-DOC used in void context
这个Rubocop错误其实很好理解:你写的那个<<-DOC heredoc(Ruby里的多行字符串写法)处于void上下文——简单说就是这段文本既没被变量接收,也没被程序用到,属于对逻辑毫无贡献的冗余代码,所以Rubocop会把它标记出来。
看你的代码,你应该是想给stratified_subsampling方法加文档注释对吧?但Ruby里方法的文档注释有标准写法,不是在方法内部放一个无人问津的heredoc。这里给你两种修复方案:
方案一:用标准的方法文档注释(推荐)
Ruby社区常用YARD风格的注释,直接把文档写在方法定义上方,既符合编码规范,Rubocop也不会再报错:
## # 该函数从数组"arr"中采样"n_points"个点,保留数据的原始分布。 # "n_strata"是划分数值的层数,需在该值上做权衡,经验而言大多数情况下10个区间足够合适。 def stratified_subsampling(arr, n_strata, n_points, srand) vs = arr.sort # 你的后续代码... end
方案二:让heredoc被程序使用(不推荐,除非有特殊需求)
如果你非要用heredoc的形式写这段文本,那必须让它被程序“感知”到——比如赋值给变量,或者作为某个方法的参数:
def stratified_subsampling(arr, n_strata, n_points, srand) # 把heredoc赋值给变量,Rubocop就不会认为它是无效代码了 method_doc = <<-DOC 该函数从数组"arr"中采样"n_points"个点,保留数据的原始分布。"n_strata"是划分数值的层数,需在该值上做权衡,经验而言大多数情况下10个区间足够合适。 DOC # 如果你需要用到这个文档,可以在这里处理,比如调试时打印 puts method_doc if $debug_mode vs = arr.sort # 你的后续代码... end
总结一下:Rubocop的Lint/Void规则就是帮你清理冗余代码,只要确保你的heredoc要么被合理使用,要么换成标准的方法注释写法,就能解决这个问题啦。
内容的提问来源于stack exchange,提问作者aerijman
相关产品推荐
相关产品推荐

