2012-01-27 73 views
3

我知道attr_accessor是在Module类中定义的,但我正在试图找到Module类的源文件,并且无法找到它。我在我的红宝石目录中递归搜索'def attr_accessor'并没有得到任何东西?如何找到包含attr_accessor方法的文件?

任何想法它可能是?

+0

如要进一步了解,这里是沿着类似的路径,你去别人的账号: HTTP:// ghouston。 blogspot.com/2006/05/attraccessor-meta-programming.html – summea 2012-01-27 06:43:53

回答

9

模块#attr_accessor在C实现可以看到方法定义如果使用撬:

[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

在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 
相关问题