如何找到包含attr_accessor方法的文件?

时间:2012-01-27 06:38:23

标签: ruby

我知道attr_accessor是在Module类中定义的,但我试图找到Module类的源文件而无法找到它。我在我的红宝石目录中递归搜索'def attr_accessor'而什么都没有?

知道它可能在哪里吗?

3 个答案:

答案 0 :(得分:9)

模块#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)> 

答案 1 :(得分:3)

在Rubinius中,它位于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 :(得分:2)

模块(和attr_accessor)是ruby的C源代码的一部分。它位于来源的https://github.com/ruby/ruby/blob/trunk/object.c#L1796