在size
的文档中,我们可以阅读here,' size()是长度的别名'。对于length
(doc)"返回self中的元素数。可能为零。"那个长度"也别名为:size"。功能可能非常相似,但我想知道不同的实现是否包含除了返回数组或集合中的元素数量之外的任何其他功能。单词 length 和 size 似乎意味着差异,特别是因为大小会指示我考虑以字节为单位的内存大小而不是元素数。
答案 0 :(得分:9)
这是完全相同的实现。
您可以在source code of Ruby 2.3.1中看到别名:
rb_define_alias(rb_cArray, "size", "length");
此外,如果您使用pry和pry-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);
}
答案 1 :(得分:2)
实际上,存在差异,但不是简单的Array
。如果您使用ActiveRecord
的{{1}},则会有所不同,您可以看到here:
如果你已经加载了所有条目,比如
Association
,那么你应该使用User.all
来避免另一个数据库查询如果您没有加载任何内容,请使用
length
对您的数据库进行计数查询如果您不想打扰这些注意事项,请使用适合的
count