在Ruby中,' size'之间绝对没有区别。和'长度'?

时间:2014-12-18 12:09:32

标签: ruby arrays string

size的文档中,我们可以阅读here,' size()是长度的别名'。对于lengthdoc)"返回self中的元素数。可能为零。"那个长度"也别名为:size"。功能可能非常相似,但我想知道不同的实现是否包含除了返回数组或集合中的元素数量之外的任何其他功能。单词 length size 似乎意味着差异,特别是因为大小会指示我考虑以字节为单位的内存大小而不是元素数。

2 个答案:

答案 0 :(得分:9)

这是完全相同的实现。

您可以在source code of 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);
}

答案 1 :(得分:2)

实际上,存在差异,但不是简单的Array。如果您使用ActiveRecord的{​​{1}},则会有所不同,您可以看到here

  
      
  • 如果你已经加载了所有条目,比如Association,那么你应该使用User.all来避免另一个数据库查询

  •   
  • 如果您没有加载任何内容,请使用length对您的数据库进行计数查询

  •   
  • 如果您不想打扰这些注意事项,请使用适合的count

  •