所以,当我在 ruby/RoR 中运行我的测试时,我收到了这个警告
.(eval):289: 警告:不要在参数括号前放置空格
我已经检查了每个地方(但显然没有),我找不到这个错误的根源。
上述错误只是在单元测试之间弹出...
谁能告诉我如何找到这个错误的位置?
最佳答案
文件和行号包含在回溯中。但是,在您的情况下,警告位于在运行时被 eval
编辑的字符串内。这意味着没有文件。 (实际上,eval
方法确实为应该在回溯中显示的文件名和行号采用可选参数,但不幸的是,在这种情况下,无论是谁编写了相关代码忘了传递那些参数。)
我担心您别无选择,只能手动检查整个代码库中对 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
d 字符串中的行号 !换句话说:在您的应用程序中某处有一个字符串被eval
d,它至少 289 行长! (实际上,这更有可能不是在您的应用程序中而是在 Rails 中完成的。Rails 路由器曾经是一个特别糟糕的罪犯,我不知道现在是否仍然如此。)
关于ruby - 试图找到 : . (eval):289 的文件/行:警告:不要在参数括号前放置空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1911840/