Где я могу увидеть исходный код для классов в моей текущей рубиновой инсталляции? - PullRequest
1 голос
/ 18 августа 2011

Я новичок в ruby, но тем не менее я установил различные версии Ruby с использованием RVM, Вот вывод моей LOAD_PATH

ruby-1.9.2-p136 :001 > puts $LOAD_PATH
/home/jose/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1
/home/jose/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby/1.9.1/i686-linux
/home/jose/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/site_ruby
/home/jose/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1
/home/jose/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby/1.9.1/i686-linux
/home/jose/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/vendor_ruby
/home/jose/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1
/home/jose/.rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/i686-linux

Ok. Таким образом, здесь возникает вопрос: где в этих каталогах я могу увидеть исходный код для таких классов, как Array или Time? (Я знаю, это чрезвычайно важный вопрос, но мне нужно знать.)

Мне давно нужно было взглянуть на источник массива.

Заранее спасибо!

PS. К какому классу вы посоветуете обратиться, если я хочу стать лучшим программистом по Ruby?

Ответы [ 2 ]

5 голосов
/ 18 августа 2011

Самый крутой гаджет для просмотра кода, который я нашел до сих пор, - pry:
http://pry.github.com/

Это irb замена с большим количеством вкусностей. Пример сеанса, чтобы вы могли видеть, как вы можете просматривать код с ним (и вы также увидите, что он может показать C-реализацию класса):

> pry
pry(main)> show-
show-command  show-doc      show-input    show-method   show-source
pry(main)> show-source Array

From: object.c in Ruby Core (C Method):
Number of lines: 6

static VALUE
rb_f_array(obj, arg)
    VALUE obj, arg;
{
    return rb_Array(arg);
}
pry(main)> cd Array
pry(Array):1> show-source each

From: array.c in Ruby Core (C Method):
Number of lines: 12

VALUE
rb_ary_each(ary)
    VALUE ary;
{
    long i;

    RETURN_ENUMERATOR(ary, 0, 0);
    for (i=0; i<RARRAY(ary)->len; i++) {
    rb_yield(RARRAY(ary)->ptr[i]);
    }
    return ary;
}
pry(Array):1>

Pry может, конечно, также перечислить источник классов Ruby.

Другим полезным инструментом для просмотра C-источника для Ruby является перекрестная ссылка на код Ruby:
http://rxr.whitequark.org/

Однако сейчас, похоже, он падает, но, надеюсь, скоро снова будет.

0 голосов
/ 18 августа 2011

Массив частично реализован в C из соображений производительности, поэтому для Array вам потребуется загрузить исходный код Ruby.

...