您的位置:首页 > 编程语言 > Ruby

[Ruby-talk]对Fixnum与的讨论

2004-10-07 22:12 399 查看
Bob Evans在应用中发现Fixnum#sort并不使用
<=>操作符,代码如下:
class Fixnum

@@count = 0

alias originalComparator <=>

def <=>(o)
@@count += 1
originalComparator(o)
end

def Fixnum.count
@@count
end
end

Running against it:

>array = [5, 4, 3, 2, 1]
=> [5,4,3,2,1]

>array.sort
=> [1,2,3,4,5]

>Integer.count
=> 0

Expected => 6 > result > 0

实际正是如此,这可以从Ruby的源代码中看出:
$ cd /v/build/ruby/ruby-1.8.1-2004.05.02/
$ less array.c

static int
sort_2(ap, bp)
...
if (FIXNUM_P(a) && FIXNUM_P(b)) {
if (a > b) return 1;
if (a < b) return -1;
return 0;
}
if (TYPE(a) == T_STRING && TYPE(b) == T_STRING) {
return rb_str_cmp(a, b);
}
...
static VALUE
sort_internal(ary)
VALUE ary;
{
qsort(RARRAY(ary)->ptr, RARRAY(ary)->len, sizeof(VALUE),
rb_block_given_p()?sort_1:sort_2);
return ary;
}
可见,Ruby确实没有使用<=>,而用最一般的
>,<进行比较。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ruby less class