有没有人知道如何找到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。
有没有人知道如何找到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。
在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)>
我看到了-click来切换源放大镜,但是当我点击它时什么也没有发生。 –
该方法的文档很长,它可能出现在底部。 –
非常酷。向下滚动我看到源代码。谢谢! –