当前位置: 首页 > 知识库问答 >
问题:

关于懒惰[拉库]

伯君浩
2023-03-14

在Raku文档中,说明了收集-获取构造被延迟计算。在下面的示例中,我很难总结出构造的懒惰:

say 'Iterate to Infinity is : ', (1 ... Inf).WHAT;

say 'gather is : ', gather {
    take 0;
    my ($last, $this) = 0, 1;

    loop {
        take $this;
        ($last, $this) = $this, $last + $this;
    }
}.WHAT;

say '------------------------------------';

my @f1 = lazy gather {
    take 0;
    my ($last, $this) = 0, 1;

    loop {
        take $this;
        ($last, $this) = $this, $last + $this;
    }
}

say '@f1         : ', @f1.WHAT;
say '@f1 is lazy : ', @f1.is-lazy;

say '------------------------------------';

my @f2 = 1 ... Inf;

say '@f2         : ', @f2.WHAT;
say '@f2 is lazy : ', @f2.is-lazy;

为什么我们在行为上有区别?尽管我们尝试做同样的事情:以懒惰的方式为数组分配Seq

有人能澄清一下这件事吗???

共有1个答案

厍彭薄
2023-03-14

在Raku文档中,说明了收集-获取构造被延迟计算。

他们可以是。但不一定。他们非常乐意以任何方式工作。

在一个关键转折中,如果询问gather是否是惰性的,它将返回false。这就是你所看到的行为的结果。

say .is-lazy
for (gather { take 42 }),                 # False
    (gather { loop { take 42 } });        # False
say .is-lazy
for (lazy gather { take 42 }),            # True
    (lazy gather { loop { take 42 } });   # True

如果为@sigil dd变量分配了一个值,该值返回true,用于调用.is-lazy,则赋值和变量都是惰性的。因此代码@f1=lazy gather...工作正常。

最后,序列(1..INF)知道它是lazy,并告诉世界它是lazy,而不需要前缀lazy:

say .is-lazy with (1 ... Inf)             # True

因此,无论有没有lazy都可以很好地进行赋值

@符号变量一样,在$符号变量或无符号标识符上调用.is-lazy将返回truefalse,与赋值/绑定的seq一致。

但是,无论.is-lazy返回true还是falseseq仍然会被缓慢地迭代。

 类似资料:
  • @没有复合关系的多通关系可以正常工作: 这执行1SQL查询,仅从Telefoni表中获取一行,持续约10ms。 但是,当添加任何带有复合@JoinColumns的@manytone关系时,延迟抓取将停止工作: 这将执行37个SQL查询,急切地获取每个父实体和每个父实体的父实体,直到解决所有关系。这将持续大约600毫秒。 由于向我的实体添加了一个额外的关系,我的性能下降了60倍...除了更改我的数据

  • 我有一个数据表的问题-懒加载。我认为问题是在IdiomasBean.java(TableBean.java),如果我把: 我得到了正确的数据表,但是<代码>按排序、筛选和不起作用。 我得到:java。lang.NullPointerException这里是堆栈跟踪: 下面是代码的其余部分: 指数xhtml diomasBean.java 懒散的数据模型。JAVA IdiomasBo.java 习语

  • 问题内容: 在我们正在开发的此应用程序中,我们注意到一个视图特别慢。我剖析了该视图,并注意到,即使数据库中只有两个对象要获取,也执行了一个查询,该查询花费了10秒。所有和关系都是懒惰的,所以这不是问题。在检查实际执行的SQL时,我注意到查询中有80多个联接。 在进一步检查该问题时,我注意到该问题是由实体类的深入层次结构和实体类之间的关系引起的。所以,我想,我只是让它们变得懒惰,应该可以解决问题。但

  • 问题内容: 我想创建自己的集合,该集合具有python list的所有属性,并且还知道如何将自身保存到数据库中或从数据库中加载。我也想使负载隐式和惰性,因为在列表创建时它不会发生,而是等到第一次使用时才发生。 有没有一种单一的方法,我可以覆盖上加载任何列表属性(如第一次使用清单,,而不必重写他们… …等)? 问题答案: 不,没有。

  • 我正在使用教义2来绘制学术时间表。以下是对这些关系的简化观察: 一个类有事件(一对多) 事件具有类型(多对一) 一个事件有一个位置(多对一) 使用

  • 问题内容: 在我们正在开发的此应用程序中,我们注意到一个视图特别慢。我对视图进行了概要分析,发现即使数据库中只有两个对象要获取,hibernate也执行了一个查询,该查询花费了10秒。所有和关系都是懒惰的,所以这不是问题。在检查实际执行的SQL时,我注意到查询中有80多个联接。 在进一步检查该问题时,我注意到该问题是由实体类的深入层次结构和实体之间的关系引起的。所以,我想,我只是让它们变得懒惰,应