试图找到一个文件/行:。(eval):289:警告:不要在参数括号前放置空格

时间:2009-12-16 02:09:46

标签: ruby testing eval parentheses

所以,当我在ruby / RoR中运行测试时,我收到此警告

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

我已经检查过每一个地方(但是很明显没有),我找不到这个错误的来源。

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

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

3 个答案:

答案 0 :(得分:1)

文件和行号包含在回溯中。但是,在您的情况下,警告位于运行时eval的字符串内。这意味着没有文件。 (实际上,eval方法 为应该在回溯中显示的文件名和行号采用可选参数,但在这种情况下,无论是谁编写了有问题的代码都忘记了通过那些论点。)

我担心除了手动检查整个代码库中对eval的每次调用,并且包括 Rails,测试框架,整个应用程序,测试,你的插件,助手,红宝石标准库,......

当然,您应该意识到问题可能并不明显,如

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字符串中的行号。

顺便说一下:警告消息中的行号289eval d字符串中的行号!换句话说:在你的应用程序的某个地方有一个字符串eval d,至少 289行! (实际上,这更有可能不是在你的应用程序中而是在Rails中.Rails路由器曾经是一个特别糟糕的攻击者,我不知道是否仍然如此。)

答案 1 :(得分:0)

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

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

警告信息中提及的eval是否抱怨“功能”?

数字289是否代表行号?

您可以在源文件中搜索前面有空格的括号吗?

顺便提一下,消息显示warning。如果忽略它会发生什么?

答案 2 :(得分:0)

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