Rubocop Lint/Void:在 void 上下文中使用的文字

dav*_*n88 4 ruby ruby-on-rails rubocop

我一直在运行 rubocop 并遇到了Lint/Void: Literal used in void context offence。

以下代码:

routes_and_postcodes.each do |hash|
  2..7.each do |i|
    route = Route.where(name: hash[:route]).first if postcode.delete(" ").first(i) == hash[:postcode].delete(" ")
  end
end
Run Code Online (Sandbox Code Playgroud)

我已经阅读了文档,但仍然无法理解问题是什么。在上下文中,完整的代码在这里:

def choose_own_van_route(postcode)
route = nil
routes_and_postcodes = []
Route.all.each do |r|
  route_postcodes = r.postcode_array
  route_postcodes.each do |pc|
    routes_and_postcodes << { postcode: pc, route: r.name }
  end
end
routes_and_postcodes.each do |hash|
  2..7.each do |i|
    route = Route.where(name: hash[:route]).first if postcode.delete(" ").first(i) == hash[:postcode].delete(" ")
  end
end
route || Route.create(cut_off_time_mins_since_midnight: 0, name: "BLANK ROUTE HAD TO BE ASSIGNED")
end 
Run Code Online (Sandbox Code Playgroud)

谢谢

Tom*_*ord 5

2..7.each do |i|
  # ...
end
Run Code Online (Sandbox Code Playgroud)

...是无效代码!!你试过运行它吗?您将看到以下错误:

NoMethodError: undefined method `each' for 7:Integer
Run Code Online (Sandbox Code Playgroud)

要解决此问题,您需要Range在括号中定义:

(2..7).each do |i|
  # ...
end
Run Code Online (Sandbox Code Playgroud)

rubocop错误是在有关本:由于如果有一个each定义的方法Integer(没有,但rubocop不知道),那么代码将是有效的,但2..<something>范围定义将起不到任何作用; 它是一个带有void context文字