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

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

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

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

Q&A

解決済

2回答

1607閲覧

ruby の Kernel ソースコードについて また、特定の関数を調べる方法について知りたいです

EzrealTrueshot

総合スコア389

Ruby

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

1グッド

1クリップ

投稿2020/03/30 17:13

https://docs.ruby-lang.org/ja/latest/class/Kernel.html

上記URLから

Kernelは
全てのクラスから参照できるメソッドを定義しているモジュール。

と記載されておりましたので、どんなメソッドがあるんだろうと show-source コマンドで確認してみようとしました。

[nix-shell:~/work]# irb irb(main):001:0> require 'pry' => true irb(main):002:0> pry [1] pry(main)> show-source Kernel From: /nix/store/h3kc2i0z93k5pnb6gsl6678yvgaci708-ruby-2.6.5/lib/ruby/2.6.0/pp.rb:567 Module name: Kernel Number of monkeypatches: 7. Use the `-a` option to display all available monkeypatches Number of lines: 23 module Kernel From: /nix/store/h3kc2i0z93k5pnb6gsl6678yvgaci708-ruby-2.6.5/lib/ruby/2.6.0/pp.r b:567 Module name: Kernel Number of monkeypatches: 7. Use the `-a` option to display all available monkeyp atches Number of lines: 23 module Kernel # Returns a pretty printed object as a string. # # In order to use this method you must first require the PP module: # # require 'pp' # # See the PP module for more information. def pretty_inspect PP.pp(self, ''.dup) end # prints arguments in pretty form. # # pp returns argument(s). def pp(*objs) objs.each {|obj| PP.pp(obj) } objs.size <= 1 ? objs.first : objs end module_function :pp end [2] pry(main)>

しかし、Kernelモジュールには pp関数 しか見当たりません。
調べ方を間違えているのでしょうか?

また、特定のメソッドの由来を調べる方法はありませんでしょうか?

例えば、最近 ruby の grep コマンドというのを発見したのですが(どこかの記事で使われているのをたまたま見た)
このコマンドがどのクラス(モジュール)で宣言されているのか?どういう内容の処理をしているのか?知りたいのですが、調べる方法はありますでしょうか?
(grep コマンドに限らず ruby上で使用される関数について調べる方法が知りたいです。)

DrqYuto👍を押しています

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

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

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

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

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

guest

回答2

0

Kernelモジュールには pp関数 しか見当たりません。

調べ方を間違えているのでしょうか?

Kernelの大半のソースコードは、C言語で実装されています。そのソースコードを調べたい場合には、pry-docのインストールが必要です(pryの説明)。

投稿2020/03/30 22:14

maisumakun

総合スコア146018

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

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

EzrealTrueshot

2020/03/31 07:18

回答ありがとうございます! C言語で実装されているとのこと知りませんでした。 勉強になりました。
guest

0

ベストアンサー

組込メソッドのほとんどはCで書かれています。Kernelのインスタンスメソッドの場合、2.7.0ではほとんどがobject.cにあります(ここが全てではありません)。ですので、多順にRubyのコードを探すだけのコマンドでは見つかりません。

Cのソースコードを探す場合は、pry-docをインストールした上で、pry上でメソッド毎にshow-sourceを実行するようにしてください(参考)。メソッド類はKernel.instance_methodsでインスタンスメソッドの配列を得ることができますので、それで確認できます。

実行例

[1] pry(main)> Kernel.instance_methods => [:dup, :itself, :yield_self, :then, ...(省略) :object_id, :send, :to_s] [2] pry(main)> show-source Kernel#itself From: object.c (C Method): Owner: Kernel Visibility: public Signature: itself() Number of lines: 5 static VALUE rb_obj_itself(VALUE obj) { return obj; }

投稿2020/03/30 22:06

raccy

総合スコア21739

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問