所以,当我在 ruby/RoR 中运行我的测试时,我收到了这个警告
.(eval):289: 警告:不要在参数括号前放置空格
我已经检查了每个地方(但显然不是),但我找不到这个错误的根源。
上面的错误只是在单元测试之间弹出......
有人能告诉我如何找到这个错误的位置吗?
所以,当我在 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 路由器曾经是一个特别糟糕的违规者,我不知道现在是否仍然如此。)
在我看来,有一条规则禁止在函数名和包含函数参数的括号之间使用空格。
在许多语言中,这将被视为一种允许的风格变化。
警告消息中eval
提到的“功能”是否被抱怨?
数字 289 是否意味着任何行号?
您可以在源文件中搜索以空格开头的括号吗?
顺便说一句,消息说warning
。如果你忽略它会发生什么?
如果它发生在单元测试之间,它可能是在 setup 或 teardown 方法中。尝试搜索eval
或尝试减少您正在运行的代码,直到错误消失。然后你就会知道去哪里看(你刚刚删除的代码)。