1

私はこのコードを持っています...

foo = opt_source.downcase.camelize
"#{foo}".new.start_check

これはクラスとメソッド start_check を呼び出す必要がありますが、未定義のメソッド エラーが発生します

"Abcd":String のメソッド `start_check' が未定義です (Abcd は foo が表すクラスです)

私が間違っていることについて何か提案はありますか?

4

3 に答える 3

4

その文字列を定数に変換する必要があります。歴史的にこれは で行われてevalいましたが、これはコードにセキュリティ上の問題を引き起こしevalます。ユーザーが指定した文字列ではありません。

(Rails で) これを行う正しい方法は、String#constantizeを使用することです。

foo = opt_source.downcase.camelize
foo.constantize.new.start_check

Ruby の場合、Kernel#const_getを使用します。

foo = opt_source.downcase.camelize
Kernel.const_get(foo).new.start_check

メソッドを呼び出す前に、エラーをチェックすることを忘れないでください。

于 2013-04-08T14:27:04.813 に答える
0

ただeval(foo).new.start_check

于 2013-04-08T14:26:41.280 に答える