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 ptr, RARRAY(ary)-len, sizeof(VALUE),
rb_block_given_p()?sort_1:sort_2);
return ary;
}
可见,Ruby确实没有使用,而用最一般的
,