[解決済み】クラスが与えられたら、インスタンスがメソッドを持っているかどうか確認する(Ruby)
2022-04-16 10:04:29
質問
私は、Rubyで
respond_to?
を使用して、あるオブジェクトが特定のメソッドを持っているかどうかをチェックします。
しかし、クラスが与えられたとして、そのインスタンスがあるメソッドを持っているかどうかを確認するにはどうすればよいでしょうか?
つまり、次のようなものです。
Foo.new.respond_to?(:bar)
でも、新しいインスタンスを作るより、もっといい方法があるような気がするんだ。
どのように解決するのか?
なぜか、みんなは
instance_methods
と
include?
としたとき
method_defined?
が仕事をします。
class Test
def hello; end
end
Test.method_defined? :hello #=> true
ノート
他のOO言語からRubyに移行する場合、または、以下のように考えている場合。
method_defined
で明示的に定義したメソッドのみを意味します。
def my_method
end
を読んでから、これを読んでください。
Rubyでは、モデル上のプロパティ(属性)は、基本的にメソッドでもあるのです。だから
method_defined?
は、プロパティに対しても真を返します。
メソッドだけでなく
例えば
String属性を持つクラスのインスタンスがある場合
first_name
:
<instance>.first_name.class #=> String
<instance>.class.method_defined?(:first_name) #=> true
から
first_name
は属性とメソッドの両方です(そしてString型の文字列です)。
関連
-
[解決済み] Rubyで中央値を計算する
-
[解決済み] Rubyで指定されたディレクトリが存在するかどうかを確認する方法
-
[解決済み] Rubyのclass << selfイディオム
-
[解決済み] ルビーです。インスタンスからクラスメソッドを呼び出す
-
[解決済み] Railsの:includeと:joinsの比較
-
[解決済み] 実行時にメソッドが定義されている場所を見つけるには?
-
[解決済み】Rubyモジュールをインクルードせずに、そのインスタンスメソッドを呼び出すことはできますか?
-
[解決済み】RubyにあってPythonにないもの、またその逆は何ですか?
-
[解決済み] Rubyで文字列のNilまたはLength == 0をチェックする良い方法はありますか?
-
[解決済み] 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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】RVMをアンインストールする方法は?[重複] RVMのアンインストール方法
-
[解決済み】macOSでrbenvをアンインストールする方法とは?
-
[解決済み] Ruby Detect方式
-
[解決済み] Rubyのcontinueに相当します。
-
[解決済み] Ruby で Fixnum から String への暗黙の変換ができない (TypeError)
-
[解決済み] マトリックスサムネーションチャレンジ
-
[解決済み] gemをインストールできない - makeが内部または外部のコマンド操作可能なプログラムまたはバッチファイルとして認識されない。
-
[解決済み] Railsアプリでhttpartyを使用して基本認証を使用するには?
-
[解決済み] Ruby で配列の順序を逆転させる
-
[解決済み] Rubyの予期しないキーワードの終了、および予期しない入力の終了