You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 07:37:29