代码之家  ›  专栏  ›  技术社区  ›  Daniel

正在尝试查找以下项的文件/行:(eval):289:警告:不要在参数括号前加空格

  •  0
  • Daniel  · 技术社区  · 15 年前

    所以,当我在ruby/ror中运行测试时,会收到这个警告

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

    我已经检查了所有的位置(但显然不是),我找不到这个错误的来源。

    上面的错误只是在单元测试之间突然出现的…

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

    3 回复  |  直到 15 年前
        1
  •  1
  •   Jörg W Mittag    15 年前

    文件和行号包含在回溯中。但是,在您的情况下,警告位于 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 警告信息中是行号 里面 埃瓦 D字符串 !换句话说:在应用程序的某个地方 埃瓦 D,这是 至少 289行长!(实际上,这更可能不是在您的应用程序中,而是在Rails中。铁路路由器曾经是一个特别严重的罪犯,我不知道这是否仍然是事实。)

        2
  •  0
  •   pavium    15 年前

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

    在许多语言中,这被认为是允许的文体变化。

    eval 在警告信息中提到,“功能”被投诉?

    289这个数字作为行号有什么意义吗?

    你能在源文件中搜索一个前面有空格的圆括号吗?

    顺便说一下,消息说 warning . 如果你忽视它会发生什么?

        3
  •  0
  •   Ben Marini    15 年前

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