クラスが定義されているかどうかを確認する方法を教えてください。
2023-08-25 17:39:19
質問
文字列をクラス名に変えるにはどうしたらよいでしょうか。ただし、そのクラスがすでに存在する場合に限ります。
もしAmberが すでに である場合、文字列からクラスへの変換を行うことができます。
Object.const_get("Amber")
または (Railsの場合)
"Amber".constantize
しかし、これらのどちらかは
NameError: uninitialized constant Amber
で失敗します。
最初に考えたのは
defined?
メソッドを使うことですが、これはすでに存在するクラスとそうでないものを区別しません。
>> defined?("Object".constantize)
=> "method"
>> defined?("AClassNameThatCouldNotPossiblyExist".constantize)
=> "method"
では、文字列を変換する前に、その文字列がクラス名であるかどうかをテストするにはどうすればよいのでしょうか? (さて、どうすれば
begin
/
rescue
ブロックはNameErrorエラーをキャッチするために? 醜すぎる? そうですね...)
どのように解決するのですか?
どのように
const_defined?
?
Railsでは、開発モードでの自動読み込みがあるため、テストするときに厄介なことがあることを覚えておいてください。
>> Object.const_defined?('Account')
=> false
>> Account
=> Account(id: integer, username: string, google_api_key: string, created_at: datetime, updated_at: datetime, is_active: boolean, randomize_search_results: boolean, contact_url: string, hide_featured_results: boolean, paginate_search_results: boolean)
>> Object.const_defined?('Account')
=> true
関連
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] Could not find or load main class "とはどういう意味ですか?
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] C++でクラスと構造体はいつ使い分けるべきか?
-
[解決済み] Rubyのclass << selfイディオム
-
[解決済み] Rubyで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Rubyでシングルクォートとダブルクォートを使い分けるとパフォーマンスが上がりますか?
-
[解決済み] ハッシュの配列をハッシュの値でソートするにはどうしたらいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] このタスクを実行するには、Ruby と Sass をインストールし、PATH に配置する必要があります」という警告を解決するには?
-
[解決済み] 2つのハッシュを比較するにはどうすればよいですか?
-
[解決済み] Ruby の文字列から最後の n 文字を抽出する。
-
[解決済み] 文字列内の複数の空白と改行を削除する
-
[解決済み] ランダムなブール値を返す最良の方法
-
[解決済み] ファイルに新しい行を追加しますか?
-
[解決済み] Rubyで再帰的にディレクトリを作成するには?
-
[解決済み] Rubyで親のクラス名を取得するには?
-
[解決済み] クラスのインスタンスメソッドの一覧を取得する
-
[解決済み] raise "foo"`と`raise Exception.new("foo")` の違いは何ですか?