Rubocop Lint / Void: литерал, используемый в пустом контексте - PullRequest
0 голосов
/ 12 июня 2018

Я работал под управлением rubocop и обнаружил Lint / Void: литерал, используемый в пустом контексте оскорбления.

следующий код:

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

Я прочитал документы , но все еще не могу понять, в чем проблема.В контексте полный код здесь:

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 

Спасибо

1 Ответ

0 голосов
/ 12 июня 2018
2..7.each do |i|
  # ...
end

... это неверный код !!Вы пытались запустить его?Вы увидите следующую ошибку:

NoMethodError: undefined method `each' for 7:Integer

Чтобы исправить это, вам нужно определить Range в скобках:

(2..7).each do |i|
  # ...
end

Ошибка rubocop связана сthis: поскольку , если был метод each, определенный в Integer (нет, но rubocop не знает этого), то код будет действительным, но 2..<something>определение диапазона не будет иметь смысла;это литерал с пустым контекстом .

...