0

したがって、Ruby/RoR でテストを実行すると、この警告が表示されます。

.(eval):289: 警告: 引数の括弧の前にスペースを入れないでください

私はすべての場所をチェックしましたが(明らかにそうではありません)、このエラーの原因を見つけることができません。

上記のエラーは、単体テストの合間にポップアップするだけです...

誰かがこのエラーの場所を見つける方法を教えてくれますか?

4

3 に答える 3

1

ファイルと行番号はバックトレースに含まれています。ただし、あなたの場合、警告はeval実行時に編集される文字列内にあります。つまり、ファイルがありません。(実際には、evalメソッドバックトレースに表示されるファイル名と行番号のオプションの引数を取りますが、この場合、問題のコードを書いた人は残念ながらそれらの引数を渡すのを忘れていました。)

Rails、テスト フレームワーク、アプリケーション全体、テスト、プラグイン、ヘルパー、Ruby 標準ライブラリなど、evalコードベース全体のすべての呼び出しを手動で調べる以外に選択肢がないのではないかと心配しています。 .

もちろん、次のように問題が明らかでない可能性があることに注意する必要があります。

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

2 つの警告メッセージの違いに注意してください。最初の警告メッセージは投稿したものとまったく同じですが、2 番目(eval)の警告メッセージには eval 文字列内の行番号ではなく、ファイル名とファイル内の行番号が含まれています。

ちなみに、289警告メッセージの行番号はd string内のeval行番号です! つまり、アプリケーションのどこかにevald という文字列があり、これは少なくとも289 行の長さです! (実際には、これはアプリケーションではなく、Rails で行われる可能性が高いです。Rails ルーターは以前は特に悪質な犯罪者でした。これが今でも当てはまるかどうかはわかりません。)

于 2009-12-16T12:56:48.030 に答える
0

関数名と関数の引数を囲む括弧の間にスペースを入れることを禁止する規則があるように私には聞こえます。

多くの言語では、これは許容される文体のバリエーションと見なされます。

警告メッセージに記載されているのはeval、「機能」についての不満ですか?

289という数字は行番号として何か意味がありますか?

ソースファイルで、前にスペースが付いた括弧を検索できますか?

ちなみに、メッセージにはwarning。無視するとどうなりますか?

于 2009-12-16T02:22:47.690 に答える
0

単体テストの間に発生している場合は、セットアップまたはティアダウン メソッドにある可能性があります。evalエラーがなくなるまで、実行中のコードを検索するか、削減してみてください。次に、どこを見ればよいかがわかります (削除したばかりのコード)。

于 2009-12-16T03:06:11.297 に答える