在Ruby中,“size”和“length”之间绝对没有任何区别吗?

3
size的文档中,我们可以阅读这里,其中'size()是length的别名'。对于length(文档),“返回self中元素的数量。可能为零。”并且长度“也称为:size”。功能可能非常相似,但我想知道不同的实现是否包含除返回数组或集合中元素数量之外的其他功能。单词lengthsize似乎暗示着差异,特别是size会让我想到字节大小而不是元素数量。

1
你能澄清一下你指的是哪个类吗?例如 Ruby 的 Array,ActiveRecord 的 Association 还是任何对象? - punkle
@punkle,我的兴趣在于多维整数数组,如果我索引了过多的维度,就会像预期的那样抛出错误,但是大小会返回一个fixnum。我曾经将其作为答案发布,但删除了它,因为收到了很多负面反馈。 - Vass
2个回答

9

这是完全相同的实现。

你可以在Ruby 2.3.1的源代码中看到它是一个别名:

rb_define_alias(rb_cArray,  "size", "length");

另外,如果你使用prypry-doc 进行检查,你会发现它们执行的代码完全相同:

[1] pry(main)> list = [1,2]
=> [1, 2]
[2] pry(main)> $ list.size

From: array.c (C Method):
Owner: Array
Visibility: public
Number of lines: 6

static VALUE
rb_ary_length(VALUE ary)
{
    long len = RARRAY_LEN(ary);
    return LONG2NUM(len);
}
[3] pry(main)> $ list.length

From: array.c (C Method):
Owner: Array
Visibility: public
Number of lines: 6

static VALUE
rb_ary_length(VALUE ary)
{
    long len = RARRAY_LEN(ary);
    return LONG2NUM(len);
}

3
实际上,有一些区别,但不是在一个简单的Array中。如果你正在使用ActiveRecordAssociation,那么有一些区别,就像你可以在这里看到的那样:
  • 如果你已经加载了所有的记录,比如说User.all,那么你应该使用length来避免另一个数据库查询。
  • 如果你还没有加载任何内容,使用count来对你的数据库进行计数查询。
  • 如果你不想麻烦自己考虑这些问题,可以使用size来自适应。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接