2013-05-17 56 views
1

有没有人知道如何找到Array Enumerable中使用的sort_by方法的源代码?ruby​​如何找到sort_by的源代码?

我已经试过sort_by.source_location并获得

NameError: undefined local variable or method `sort_by' for main:Object 

我用撬尝试,但如果找不到我的CD到数组,然后到可枚举sort_by。

回答

4

您可以随时使用Ruby文档。

http://ruby-doc.org/core-2.0/Enumerable.html#method-i-sort_by

在方法悬停并且存在在以查看源右上方的链接。

+0

我看到了-click来切换源放大镜,但是当我点击它时什么也没有发生。 –

+1

该方法的文档很长,它可能出现在底部。 –

+0

非常酷。向下滚动我看到源代码。谢谢! –

2

Pry,如果您先安装pry-doc插件,您应该能够查看Enumerable#sort_by来源。

pry-doc插件需要公开C级文档和源代码。

[13] pry(main)> $ Enumerable#sort_by 

From: enum.c (C Method): 
Owner: Enumerable 
Visibility: public 
Number of lines: 48 

static VALUE 
enum_sort_by(VALUE obj) 
{ 
    VALUE ary, buf; 
    NODE *memo; 
    long i; 
    struct sort_by_data *data; 

    RETURN_SIZED_ENUMERATOR(obj, 0, 0, enum_size); 

    if (RB_TYPE_P(obj, T_ARRAY) && RARRAY_LEN(obj) <= LONG_MAX/2) { 
     ary = rb_ary_new2(RARRAY_LEN(obj)*2); 
    } 
    else { 
     ary = rb_ary_new(); 
    } 
    RBASIC(ary)->klass = 0; 
    buf = rb_ary_tmp_new(SORT_BY_BUFSIZE*2); 
    rb_ary_store(buf, SORT_BY_BUFSIZE*2-1, Qnil); 
    memo = NEW_MEMO(0, 0, 0); 
    OBJ_INFECT(memo, obj); 
    data = (struct sort_by_data *)&memo->u1; 
    data->ary = ary; 
    data->buf = buf; 
    data->n = 0; 
    rb_block_call(obj, id_each, 0, 0, sort_by_i, (VALUE)memo); 
    ary = data->ary; 
    buf = data->buf; 
    if (data->n) { 
     rb_ary_resize(buf, data->n*2); 
     rb_ary_concat(ary, buf); 
    } 
    if (RARRAY_LEN(ary) > 2) { 
     ruby_qsort(RARRAY_PTR(ary), RARRAY_LEN(ary)/2, 2*sizeof(VALUE), 
        sort_by_cmp, (void *)ary); 
    } 
    if (RBASIC(ary)->klass) { 
     rb_raise(rb_eRuntimeError, "sort_by reentered"); 
    } 
    for (i=1; i<RARRAY_LEN(ary); i+=2) { 
     RARRAY_PTR(ary)[i/2] = RARRAY_PTR(ary)[i]; 
    } 
    rb_ary_resize(ary, RARRAY_LEN(ary)/2); 
    RBASIC(ary)->klass = rb_cArray; 
    OBJ_INFECT(ary, memo); 

    return ary; 
} 
[14] pry(main)>