0

所以,当我在 ruby​​/RoR 中运行我的测试时,我收到了这个警告

.(eval):289: 警告:不要在参数括号前放置空格

我已经检查了每个地方(但显然不是),但我找不到这个错误的根源。

上面的错误只是在单元测试之间弹出......

有人能告诉我如何找到这个错误的位置吗?

4

3 回答 3

1

文件和行号包含在回溯中。但是,在您的情况下,警告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警告消息中的行号evald 字符串中的行号!换句话说:在你的应用程序的某个地方有一个字符串evald,它至少有289 行长!(实际上,这更有可能不是在您的应用程序中而是在 Rails 中完成的。Rails 路由器曾经是一个特别糟糕的违规者,我不知道现在是否仍然如此。)

于 2009-12-16T12:56:48.030 回答
0

在我看来,有一条规则禁止在函数名和包含函数参数的括号之间使用空格。

在许多语言中,这将被视为一种允许的风格变化。

警告消息中eval提到的“功能”是否被抱怨?

数字 289 是否意味着任何行号?

您可以在源文件中搜索以空格开头的括号吗?

顺便说一句,消息说warning。如果你忽略它会发生什么?

于 2009-12-16T02:22:47.690 回答
0

如果它发生在单元测试之间,它可能是在 setup 或 teardown 方法中。尝试搜索eval或尝试减少您正在运行的代码,直到错误消失。然后你就会知道去哪里看(你刚刚删除的代码)。

于 2009-12-16T03:06:11.297 回答