gpt4 book ai didi

ruby-on-rails - Ruby 中的数组 : Take vs Limit vs First

转载 作者:行者123 更新时间:2023-12-03 10:58:42 25 4
gpt4 key购买 nike

假设您在 Rails 中有一个对象数组 @objects
如果我想显示前 5 个对象,使用以下方法有什么区别:

  • @objects.limit(5)
  • @objects.take(5)
  • @objects.first(5)

  • 我说的是前端(Ruby), 不是 SQL .对象在 SQL 中没有限制的原因是因为相同的数组可以在其他地方使用而不对其应用限制。

    它与对象实例化有什么关系吗?

    最佳答案

  • limit 不是数组方法
  • take 需要一个参数;如果数组为空,则返回一个空数组。
  • first 可以在没有参数的情况下调用;如果数组为空且参数不存在,则返回 nil。

  • 2.0 的源代码
                  static VALUE
    rb_ary_take(VALUE obj, VALUE n)
    {
    long len = NUM2LONG(n);
    if (len < 0) {
    rb_raise(rb_eArgError, "attempt to take negative size");
    }
    return rb_ary_subseq(obj, 0, len);
    }

    首先是 2.0 的来源:
                  static VALUE
    rb_ary_first(int argc, VALUE *argv, VALUE ary)
    {
    if (argc == 0) {
    if (RARRAY_LEN(ary) == 0) return Qnil;
    return RARRAY_PTR(ary)[0];
    }
    else {
    return ary_take_first_or_last(argc, argv, ary, ARY_TAKE_FIRST);
    }
    }

    在 Rails 方面:
  • limit(5)将添加 limit(5) 的范围到 ActiveRecord::Relation . 不能在数组上调用 ,所以 limit(5).limit(4)将失败。
  • first(5)将添加 limit(5) 的范围到 ActiveRecord::Relation . 它也可以在数组 上调用所以.first(4).first(3)将与 .limit(4).first(3) 相同.
  • take(5)将在当前范围内运行查询,构建所有对象并返回前 5 个。它仅适用于数组 ,所以 Model.take(5)不会工作,但其他两个会工作。
  • 关于ruby-on-rails - Ruby 中的数组 : Take vs Limit vs First,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16555206/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com