Как мне найти файл, содержащий метод attr_accessor? - PullRequest
3 голосов
/ 27 января 2012

Я знаю, что attr_accessor определен внутри класса Module, но я пытаюсь найти исходный файл для класса Module и не могу его найти.Я рекурсивно искал в моем рубрике «def attr_accessor» и ничего не получил?

Есть идеи, где это может быть?

Ответы [ 3 ]

9 голосов
/ 27 января 2012

Модуль # attr_accessor реализован на C. Вы можете увидеть определение метода, если используете Pry:

[2] pry(main)> show-method Module#attr_accessor

From: object.c in Ruby Core (C Method):
Number of lines: 10
Owner: Module
Visibility: private

static VALUE
rb_mod_attr_accessor(int argc, VALUE *argv, VALUE klass)
{
    int i;

    for (i=0; i<argc; i++) {
    rb_attr(klass, rb_to_id(argv[i]), TRUE, TRUE, TRUE);
    }
    return Qnil;
}
[3] pry(main)> 
3 голосов
/ 27 января 2012

В Рубиниусе это в kernel/delta/module.rb:

def attr_accessor(*names)
  vis = Rubinius::VariableScope.of_sender.method_visibility

  names.each do |name|
    Rubinius.add_reader name, self, vis
    Rubinius.add_writer name, self, vis
  end

  return nil
end
2 голосов
/ 27 января 2012

Модуль (и attr_accessor) является частью C-источника ruby.Он расположен в https://github.com/ruby/ruby/blob/trunk/object.c#L1796 в источнике

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...