rubyのObject#methodsメソッドについて

このQ&Aのポイント
  • rubyのmethodsメソッドについて解説します。methodsメソッドは、クラスごとのメソッドを取得するためのメソッドです。
  • ObjectクラスのmethodメソッドをMethodインスタンスとして取得する場合、parametersメソッドを使用して引数の情報を得ることができます。
  • しかし、methodsメソッド自体にはparametersメソッドが存在せず、クラスごとのメソッドを全て表示させる方法がわかりません。ご存知の方、教えてください。
回答を見る
  • ベストアンサー

rubyのObject#methodsについて

こんにちは、 rubyのmethodsメソッドについてです。 met = Object.method(:method) として、ObjectクラスのmethodメソッドをMethodインスタンスとしたとき met.parametes #=> [[:ref]] とすると、引数の情報を得ることができます。 しかし、 met.methods には、「:parameters」がありません。 クラスごとのメソッドを全て表示させたいのですが、 methodsはすべてのメンバを取り出すメソッドではないのでしょうか。 ご存知の方がいらっしゃいましたらお教えくださいませ。 ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux] Rails 3.1.4 gem 1.8.17 CentOS 5.7

  • graf_
  • お礼率90% (28/31)
  • Ruby
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • sholmes
  • ベストアンサー率81% (89/109)
回答No.2

こちらの環境だと、met.methodsの戻り値に:parametersも含まれました。 ruby1.9.3p125のdarwinとmingw32で確認済みです。 また、最後に貼っておいたideoneの1.9.2でも同様の結果が見られます。 Object#methods の引数にnilかfalseを渡しているのでなければ、 Railsなり何かの追加gemなりで上書きしてるのかもしれませんね もし素のRubyで出ているようであれば、是非Rubyのコミュニティへ報告を上げてあげて下さい <おまけ> クラスごとのメソッドを表示するという意味合いですと、Object#methodsではなくてModule#instance_methodsが適するんじゃないかなと思います。 Object#methodsには特異メソッドも含まれるので http://ideone.com/WSMU3

graf_
質問者

お礼

回答ありがとうございます。 今朝確認しましたら存在しました。 再現もできず、白昼夢のような質問をいたしまして申し訳ありませんでした。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

>met.methods >には、「:parameters」がありません。 ありますけど。。。 $ ruby -v -e 'p Object.method(:method).methods.sort' ruby 1.9.3p125 (2012-02-16 revision 34643) [x86_64-linux] [:!, :!=, :!~, :<=>, :==, :===, :=~, :[], :__id__, :__send__, :arity, :call, :class, :clone, :define_singleton_method, :display, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :initialize_clone, :initialize_dup, :inspect, :instance_eval, :instance_exec, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :kind_of?, :method, :methods, :name, :nil?, :object_id, :owner, :parameters, :private_methods, :protected_methods, :public_method, :public_methods, :public_send, :receiver, :respond_to?, :respond_to_missing?, :send, :singleton_class, :singleton_methods, :source_location, :taint, :tainted?, :tap, :to_enum, :to_proc, :to_s, :trust, :unbind, :untaint, :untrust, :untrusted?]

graf_
質問者

お礼

早速の回答ありがとうございます。 今朝確認しましたらきちんと存在しました。 お手を煩わしまして申し訳ありませんでした。

関連するQ&A

  • Ruby言語に関して質問です。

    Rubyで、クラス定義の際の質問です。 通常 cattle= Class.new(); で引数がデフォルトの場合は、Objectクラスのサブクラス生成すると 公式のリファレンスに記述があります。 調べてみると上記コードの場合は,cattleという無名クラスと呼ばれるものになるそうです。 この無名クラスとはYUGUIさんのサイトにある http://yugui.jp/images/uploaded/20084013-metaclass.png 右端の列にあるメタクラスと呼ばれるものになるのでしょうか? (無名クラス と メタクラスは同義??) また上記URLの画像からメタクラスはClassクラスのインスタンスであるようです。 ただClass.newで実行される newというクラスメソッドってサブクラスを生成すると いうふうにリファレンスにありますがレシーバであるClassクラスのインスタンスを 返すという記述はありません。 ただ、おそらくメタクラスというのはClassクラスのインスタンスなのだとは思いますが、 この理由はなぜなのでしょうか? もう一点、p Cattle.class();と記述すると Classクラスが返ると思います。これはCattleクラスのClassクラスのインスタンスである ということになるのでしょうか? しかしながらYUGUIさんの画像ではCattleはメタクラスのインスタンスとなっています。 であれば、メタクラスを意味するのでしょうか? 公式リファレンスには、上記に書いたような関係はRubyを扱う際には特に問題ではないとありますが、気になっています。

    • ベストアンサー
    • Ruby
  • CentOS5でruby1.8とrails2、SQlite3のインスト

    CentOS5でruby1.8とrails2、SQlite3のインストール。 環境がCentOS5.5、ruby1.8.7-p302、SQlite3系で下記のサイトにあるようなRubyプログラミングを考えている者です。 http://www.db.is.kyushu-u.ac.jp/rinkou/libpcap/rubypacketdb.html 今回は、http://www.gfd-dennou.org/arch/davis/gfdnavi/doc/install/install-ru... を参考にしながら環境を作っていましたが、rubygem1.3.7でsetupを行うと、勝手にrailsの最新版をインストールされてしまいます。(なぜか強制的に3.0.0へ) どの段階でどうコマンドを打てば、railsの古いバージョン(例えば2.3.5)をインストール出来るのでしょうか? また、http://www.db.is.kyushu-u.ac.jp/rinkou/ruby/rubyinstalllinux.html を参考にしてSQlite3をgemでインストールしようとしたところ、「ruby1.9.1にヴァージョンをあげて」を怒られました。 ググってみたら、ruby1.8.7でもsqlite3は導入できるそうなので納得いきません。 なにか解決法はないでしょうか? 長くなりすいませんでした。どうかお願い致します。

  • RubyのDateクラスのメソッドが見つからない

    先日よりRubyでのプログラミングを始めてみたのですが DateクラスのDate::MOTHNAMESを参照しようとしたところ undefined method `MOTHNAMES' for Date:Class (NoMethodError) と返ってきてしまいました。 ほかにもDate::exist?メソッドもためしてみましたが、同じ様なコメントが 返ってきました。 undefined method `exist?' for Date:Class (NoMethodError) なお、 Date.newなどはつかえています どういった問題でどのように解決すれば良いのか、ご教示願えればと思います。 バージョンは ruby 1.9.3p0 (2011-10-30 revision 33570) [x86_64-darwin11.2.0] で、Mac OSX Lionで動かしています。

  • Rubyでnet::httpを用いてPOSTする

    今晩わ。 RubyでNet::HTTPをもちいてPOST送信する際の処理について 質問です。 Net::HTTPクラスのインスタンスメソッドのpostメソッドを用いて送信する場合 送信内容を # version 1.2 (Ruby 1.8.x or later) response = http.post('/cgi-bin/search.rb', 'query=subject&target=ruby') 上記のように、引数に渡していると思います。 このとき、値の中にパラメータのデリミタと同じ&を入れたい場合どうしたらいいのでしょうか? 例えば query=subject&target=ruby&PHP のような感じでvalueとして&を渡す場合です。 Net**HTTP::Postクラスのrequestメソッドを用いてハッシュとして渡した時は問題なかったのですが、上記のpostメソッドの時がPOSTされた値を取得するときにキチンと取得できませんでした。これはなにか対処方法があるのでしょうか? ご教授ください。 おねがいします。

    • ベストアンサー
    • Ruby
  • Ruby 特異メソッドのnewが先に実行?

    Rubyのインスタンス生成について質問があります。 通常クラスを定義する場合は class Hoge ; def hello(); pirnt "hello"; end であると思います。 ただ Hoge = Class.new(); でもクラスは定義できるとききました。 ただこの場合Hogeクラスに定義できるのは HogeというClassクラスから作られた特異クラスとしてのHogeに 特異メソッドのみを定義できるということですよね? 通常のインスタンスメソッドは定義できませんよね? ではでは、 hoge = Class.new(); とした場合はどうなるのでしょうか? この場合は Classクラスの純粋なインスタンスとなるのでしょうか? 前者の定義とおなじ仕方ですが代入先が、通常の変数です。 この場合は、クラスオブジェクトとして生成されるのですか? オンラインマニュアルをみたところ 「新しく名前の付いていない superclass のサブクラスを生成します。 superclass が省略された時にはObject のサブクラスを生成します。 名前のないクラスは、最初に名前を求める際に代入されている定数名を検索し、見つかった定数名をクラス名とします。」 とあります。 上記内容は Classクラスの特異クラスとして定義されている特異メソッド(new)です。 これは Class.new()で作られたインスタンスを代入する先が定数であればその定数名と同じクラスを定義しつつそのClassクラスのクラスオブジェクトを生成するという意味合いでまちがいないでしょうか? 上記のとおりであれば hoge =Class.new()の場合は、やはりhogeというクラスを定義することになるのでしょうか? クラス定義は定数でなければならないはずですよね。 ただ実際、 p hoge;として出力すると#とひょうじされています。これはhogeがクラスオブジェクトではなく ただのインスタンスであるということでしょうか? であるならばこの hoge = Class.new()の式のnewはClassクラスオブジェクトに定義された特異メソッドではなく Classクラスに定義されたnewメソッド・・・・・つまりClassクラスに定義されたインスタンスメソッドの方のnewメソッドだとおもうのですが・・・・・・。 つまりこちらのメソッドですね。 「new( ... ) クラスのインスタンスを生成して返します。このメソッドの引数はブロック引数も含め initialize に渡されます。」 ※オンラインリファレンスから参照しました。 しかし 通常メソッドの検索は特異メソッドからはじまりその後クラスのインスタンスメソッド->親クラスのメソッドと 検索して行くとあります。 必ず先に、特異メソッドを実行しているはずだと思うのですが・・・。 やはり特異メソッドnewを実行しているのでしょうか? 長々すみませんが、ご教授ください。

    • ベストアンサー
    • Ruby
  • Ruby on Railsインストール(アップデート)

    Ruby on Railsインストール(アップデート) RailsをCentOS4.4?にインターネット経由以外でのインストールする方法を知りたいです。 下記に条件を記載させて頂きますので、本当に申し訳ありませんが、 ご教授していただけますでしょうか? 無知で申し訳ありませんがよろしくお願いします。 ■現状  サーバOS CentOS4.4  Ruby 1.6.x  gem 0.9x??  rails 1.x  mysql4.1  sqlite3 ■条件  ・会社のサーバなので、インターネットが使用できない。  ※CDやUSBも無理です。   やり方としては、ソースを会社のメールアドレスに送り   自分の端末からFTPでサーバにアップロードします。   また、上長には許可は頂いています。  ・現状古いバージョンのRuby・RubyGems・Ruby on Railsは   インストールされていますが、アップデートよりは、   上書きインストールの方が望ましい。   ※理解し易いため。    初心者のためアップデートは難関かとm(--)m ■今回インストール(アップデート)したい物  Ruby on Rails 2.x ----以下は、ダウンロード済み----  Ruby 1.8.7  ※こちらは、色々なサイトに記載されています参考にしています。  RubyGems  ※これは、RubyForgeからダウンロード済み ■気になる点  ほかにインストールしなければならないものってありますでしょうか? 教えて君で申し訳ありませんが、よろしくお願いします。

    • ベストアンサー
    • Ruby
  • Ruby インスタンスの初期化について

    newメソッドを使わずにinitializeメソッドを定義しただけで インスタンスが作成されて初期化までされる理屈について 教えていただけないでしょうか? またクラスを作るときに基となっているObjectクラスとは一体 何物なのか、教えて頂きたい。 例 01:#Sampleクラスを作る 02:class Sample 03: #Samlpeクラスのインスタンスを初期化 04: def imitialize( lv, hp ) 05: end 06:end ↑の場合インスタンスlvとhpは、「lv = sample.new( 0 )」などと言う ように定義されてない。 それにnewメソッドでインスタンスを作りそこに数値の0を代入できるなら そもそもinitializeで初期化する必要は無いのではないでしょうか? 有識者の方いらっしゃいましたら、ご説明をよろしくお願いします。

    • ベストアンサー
    • Ruby
  • Rails deviceのインストールについて

    Railsの認証プラグイン「device」を以下の手順でインストールを行いましたが うまくいきません。どなたか、ご教授願いえないでしょうか 【手順】  (1)Gemfileに「gem 'device'」を追加  (2)bundle install   ここで以下のエラー発生。  「Could not find gem 'device (>= 0) ruby' in any of the gem sources listed in your   Gemfile or available on this machine.」 【環境】  Ruby 2.2.2  Rails 4.0.13  CentOS 6.6 以上、宜しくお願いします。

    • ベストアンサー
    • Ruby
  • Linuxにrailsを入れたい

    度々すみません。 centOS6.6にrailsを入れようとしていますが、エラーになってしまいます。 (参考にしているURL:http://tsuchikazu.net/linux_ruby_on_rails_install/) #gem install rails で、 ERROR: Loading command: install (LoadError) cannot load such file -- zlib ERROR: While executing gem ... (NameError) uninitialized constant Gem::Commands::InstallCommand というエラーが発生します。 http://tmpz84.blogspot.jp/2011/09/gem-install-no-such-file-to-load-zlib.html こちらのURLを参考に、 zlibを入れようとしたのですが、 #which ruby で /usr/local/src/rbenv/shims/ruby と返ってきて、「ディレクトリではありません」となって、 操作が続きません・・・。 どなたかご教示お願いします。

  • linuxにrailsのインストールができない。

    今CentOSにrailsをインストールしようとしているのですが、はまっています。 rubyはrvmでインストールできたので、gemでrailsをインストールしたのですが、 railsコマンドをうつと、「-bash: /usr/local/bin/rails: /usr/local/bin/ruby: bad interpreter: そのようなファイルやディレクトリはありません。」とでます。 これは昔railsを入れて、うまく動かなかったのでuninstallしたという経緯がある り、その設定ファイルがどこかにのこっているからだと思うのですが、でもrails のパスをどこにとおし直したらいいかわかりません(bash_profileかな?と思うのですが 、railsとうったときに何を参照していいいかわからない)。 何か気づいた点がありましたら、助言いただけると幸いです。

    • ベストアンサー
    • Ruby

専門家に質問してみよう