/ / Rubyのuniqメソッドのソースコード-ruby

Rubyでのuniqメソッドのソースコード - ruby

詮索好きで私はタイプしている

Array.instance_method(:uniq).source_location

予想:uniqのソースコードの場所

実際: nil

私は間違って何をしていますか?

回答:

回答№1の場合は3

あなたは上のドキュメントを読み直したいかもしれません Method#source_location

このメソッドを含むRubyソースファイル名と行番号を返します。このメソッドがRubyで定義されていない場合はnilを返します(つまり、ネイティブ

このドキュメントページの左上隅にある配列は、次のように定義されています。 proc.c、それはそれが方法だと言った ネイティブです.


回答№2については2

Method#source_location の場所を返します ルビー ソースコード。使用しているRubyの実装によっては、 〜する Rubyのソースコード。MRI、YARV、MRuby、またはtinyrbでは、メソッドはC、XRubyまたはJRubyで実装でき、Java、Ruby.NETまたはIronRubyで実装でき、C#、MagLevで実装できます。 Smalltalk、MacRuby、RubyMotionで実装され、Objective-C、Topazで実装され、RPython、Cardinalで実装され、Perl6で実装され、RubiniusでC ++で実装される場合があります。

ただし、Rubiniusでは、他のRuby実装よりも多くのメソッドがRubyに実装されているため、実際に source_location はるかに大きいです。たとえば、これは私がRubiniusで得たものです。

Array.instance_method(:uniq).source_location
# => ["kernel/common/array.rb", 1640]

これは何 kernel/common/array.rb 次のようになります(Rubiniusのバージョンをコンパイルしてからコードが変更されたため、行番号が一致しません):

def uniq(&block)
dup.uniq!(&block) or dup
end