2009-12-16 3 views
0

Таким образом, я получаю это предупреждение, когда я бегу моих тестов в Ruby/RoRпытается найти файл/строку для:. (Eval): 289: предупреждение: не ставьте пробел перед аргументом скобки

. (eval): 289: предупреждение: не помещать пробел перед круглыми скобками аргументов

Я проверил все где (но obvoiusly нет), и я не могу найти происхождение этой ошибки.

выше ошибка просто всплывает между ними модульными тестами ...

Может кто-то подсказка меня на том, как найти место этой ошибки?

ответ

1

Номер файла и строки содержится в обратной линии. Однако в вашем случае предупреждение находится внутри строки eval ed во время выполнения. Что означает нет файла. (На самом деле, eval метод делает принять дополнительные аргументы для имени файла и номер строки, которые должны быть отображены в трассировке, но в этом случае тот, кто написал код, о котором идет речь, к сожалению, забыл передать эти аргументы.)

I боюсь, что у вас нет другого выбора, кроме как вручную просмотреть каждый звонок до eval на всей вашей кодовой базе и что включает в себя Rails, вашу тестовую инфраструктуру, все ваше приложение, ваши тесты, ваши плагины, ваши помощники, стандартную библиотеку ruby, ...

Конечно, вы должны знать, что проблема может быть не очевидна, как в

eval 'foo (bar, baz)' 

Это также может быть что-то вроде

def foo(*args) 
    puts args.join 
end 

bar = 'Hello' 
baz = 'World' 

foostr = 'foo'      # in one file 
barstr = 'bar'      # in another file in a different directory 
bazstr = 'baz'      # in another file in a different directory 
argstr = "(#{barstr}, #{bazstr})"  # in yet another file 
$,  = ' '       # in some third-party plugin 
str = [foostr, argstr].join  # in a fourth file 
eval str        # somewhere else entirely 
eval str, binding, __FILE__, __LINE__ # this is how it *should* be done 

Обратите внимание на разницу между двумя предупреждениях: первый читает так же, как тот, который вы в курсе, но второй один имеет имя файла вместо (eval) и номер строки внутри файла вместо номера строки внутри строки eval.

Кстати: номер строки 289 в сообщении предупреждения является номер строки внутри eval й строки! Другими словами: где-то в вашей заявке есть строка eval d, которая равна не менее 289 строк длиной! (На самом деле, скорее всего, это произошло не в вашем приложении, а в Rails. Rails-маршрутизатор был особенно плохим преступником, я не знаю, если это все еще так.)

+0

* крики * Это серьезный код для просмотра! – Daniel

0

Мне кажется, что существует правило, которое запрещает пробел между именем функции и круглыми скобками, содержащими аргументы функции.

На многих языках это считается допустимым стилистическим изменением.

Указано в предупреждающем сообщении eval, о котором «жалуются» функции?

Имеет ли номер 289 что-либо в качестве номера строки?

Не могли бы вы найти исходные файлы для круглых скобок, которым предшествует пробел?

Кстати, в сообщении говорится warning. Что произойдет, если вы проигнорируете это?

+0

Его просто предупреждение , Ничего не происходит, но его раздражает. 289 - номер строки в коде eval'd, именно там, где его оценка или то, что оценивается, является трудной частью. Его как 289 где-то ... – Daniel

0

Если это происходит между модульными тестами, это может быть метод настройки или разрыва. Попробуйте найти eval или попробуйте уменьшить код, который вы используете, пока ошибка не исчезнет. Тогда вы будете знать, где искать (код, который вы только что удалили).