1

Railsアプリで、定数が定義されているかどうかを確認し、必要に応じて自動ロードします。自動読み込みが行われるまで、defined?演算子はfalseを返します。

defined? Foo # => false :(
Foo # => Foo
defined? Foo # => true

私の現在の回避策はこれです:

begin
  Foo # try to autoload
  true
rescue NameError
  false
end

定数が定義されているかどうかを確認するだけでなく、必要に応じて自動ロードするためのより良い方法はありますか?


要求による理論的根拠:

Rails用のKonachaJSテストフレームワークは、フィクスチャのRubyファイルが存在する場合はそれを自動的に取得する必要があります。ロードはRailsの自動ロードメカニズムで行われるはずなので、自動リロード(を使用config.cache_classes = false)の恩恵を受けます。

4

2 に答える 2

1

could_be_defined?自動ロードを試みてから戻るメソッドを作成しようとしているように聞こえtrueますfalse

クラスを使用してみるまで、そのクラスが存在するかどうかを確実に知る方法はありません。これは、非常に動的な言語の利点の 1 つです。マイナス面は不確実性です。

強制読み込みとテストの方法は、確実に知る唯一の方法です。一部のモジュールは経由で宣言されていない場合がありますautoloadが、実際には必要に応じてオンザフライで生成されます。何が存在するか、または存在しないかを予測しようとしても、せいぜい信頼できません。

于 2012-08-15T17:27:08.947 に答える