Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

pryのコマンドshow-sourceでメソッドの実装をみてみる

pryのコマンドの一つ「show-source」を使うと、メソッドの実装を確認できます。
素のpryには入っていないので

$ gem install pry-doc

であらかじめ導入しておきます。

組み込みメソッド

> show-source String#+

From: string.c (C Method):
Owner: String
Visibility: public
Number of lines: 20

VALUE
rb_str_plus(VALUE str1, VALUE str2)
{
    VALUE str3;
    rb_encoding *enc;

    StringValue(str2);
    enc = rb_enc_check(str1, str2);
    str3 = rb_str_new(0, RSTRING_LEN(str1)+RSTRING_LEN(str2));
    memcpy(RSTRING_PTR(str3), RSTRING_PTR(str1), RSTRING_LEN(str1));
    memcpy(RSTRING_PTR(str3) + RSTRING_LEN(str1),
	   RSTRING_PTR(str2), RSTRING_LEN(str2));
    RSTRING_PTR(str3)[RSTRING_LEN(str3)] = '\0';

    if (OBJ_TAINTED(str1) || OBJ_TAINTED(str2))
	OBJ_TAINT(str3);
    ENCODING_CODERANGE_SET(str3, rb_enc_to_index(enc),
			   ENC_CODERANGE_AND(ENC_CODERANGE(str1), ENC_CODERANGE(str2)));
    return str3;
}

自前定義のもの

自前で定義したものも、この通りです。

> show-source Test#hoge

From: (pry) @ line 2:
Owner: Test
Visibility: public
Number of lines: 1

def hoge; "uuu"; end

…いちいち、grepしてメソッド見に行かなくてよかったんや(白目