質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

2回答

362閲覧

Rubyの全てのオブジェクトが持つmethodを取得したい

takeshita0531

総合スコア5

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2021/05/30 10:36

編集2021/05/30 14:54

Rubyの全てのmethodを取得したいです。

Ruby

1Class.methods 2Array.methods 3Class.instance_methods 4Array.instance_methods

これら以外のものも全て取得したいです。
ご教示をお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

winterboum

2021/05/30 11:11

これら以外 とは methods、instancs_methods 以外 ですか Class、Array 以外 ですか?
takeshita0531

2021/05/30 11:49

ご返信いただきありがとうございます。 Class、Array以外です。
asm

2021/05/30 12:29

全てのオブジェクトが共通で持つメソッドでしょうか? それとも、あるオブジェクトの特異メソッドのようなものも含む全てのメソッドを列挙したいのでしょうか?
takeshita0531

2021/05/30 12:38

あるオブジェクトの特異メソッドのようなものを含む全てのメソッドを列挙したいです。
winterboum

2021/05/30 16:44

となりますと、 全てのオブジェクト を列挙する もしくは class Class の全てのインスタンスを列挙する 必要がありますが、その方法を知らないのでお役に立てません。
guest

回答2

0

タイトルの

Rubyの全てのオブジェクトが持つmethodを取得したい

だと、「全てのオブジェクトが共通で持つメソッド」という意味になるので、正しく書き直しましょう。
「Rubyの全てのmethodを取得したい」ですかね。

そうだとすると、

Ruby

1ObjectSpace.each_object.select{|x| x.is_a?(Class)}

で、その時点で有効なクラス一覧が得られるので、それぞれに対して、お書きのメソッドを実行すれば良いでしょう。

##追記
コメントでご指摘のあったとおり、ObjectSpace.each_object(Class)で十分でした。

投稿2021/05/30 14:31

編集2021/05/31 01:51
otn

総合スコア84761

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takeshita0531

2021/05/30 14:53

ご回答いただきありがとうございます。 申し訳ございません。 「Rubyの全てのmethodを取得したい」 に訂正します。
winterboum

2021/05/30 16:57

Class が 553も有った! method総数で10万超えるかな
asm

2021/05/30 22:57

each_objectに引数指定するとselectいらない気がしますが
otn

2021/05/31 01:49

あ、引数でクラス指定できますね。ご指摘ありがとうございます。
takeshita0531

2021/05/31 03:02

ObjectSpace.each_object(Class) で取得することができました。 ご回答いただいた方々、ありがとうございます。
guest

0

全てのオブジェクトのメソッド名を列挙する場合

ruby

1all_methods = [] 2ObjectSpace.each_object do |obj| 3 all_methods |= obj.methods | obj.private_methods | obj.singleton_methods 4end 5 6Symbol.all_symbols.each do |obj| 7 all_methods |= obj.methods | obj.private_methods | obj.singleton_methods 8end 9 10[0,1,true,false,nil].each do |obj| 11 all_methods |= obj.methods | obj.private_methods | obj.singleton_methods 12end

で、たぶん大体取れます。

大体としたのは以下2点の問題があるからです。

  • [0,1,true,false,nil]を後に列挙してるようにFixnum,Symbol,TrueClass,FalseClass,NilClass

は列挙されないのですが
特定のFixnumにsingleton_methodを定義されると見つけられません。

  • method_missingによる疑似的なメソッドを見つける事はできません。

投稿2021/05/30 23:08

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問