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

7 浏览
0 Comments

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

size的文档中,我们可以在这里读到"size()是length的别名"。对于length文档)"返回self中元素的数量。可能为零。"并且length"也是别名:size"。这两者的功能可能非常相似,但我想知道不同的实现除了返回数组或集合中元素的数量之外是否还包含其他功能。length和size这两个词似乎暗示了一个差异,尤其是size会让我联想到内存的大小(以字节为单位),而不是元素的数量。

0
0 Comments

在Ruby中,“size”和“length”之间确实存在一些差异,但在简单的Array中没有区别。如果您使用的是ActiveRecord的Association,那么就有区别了,如下所示:

  • 如果您已经加载了所有条目,比如User.all,那么应该使用“length”来避免另一个数据库查询。
  • 如果您还没有加载任何内容,使用“count”来在数据库上进行计数查询。
  • 如果您不想考虑这些问题,使用“size”即可自适应。
0
0 Comments

在Ruby中,'size'和'length'之间没有任何区别。这个问题的出现是因为在Ruby的源代码中,可以看到'length'是'size'的别名。具体的实现可以在Ruby 2.3.1的源代码array.c中找到:

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);
}

0