gpt4 book ai didi

closures - "to close over the enclosing scope/class"是什么意思?

转载 作者:行者123 更新时间:2023-12-03 20:03:45 26 4
gpt4 key购买 nike

Akka 文档记录了使用 Props 的危险变体:

// NOT RECOMMENDED within another actor:
// encourages to close over enclosing class
val props7 = Props(new MyActor)

然后继续陈述:

This method is not recommended to be used within another actor because it encourages to close over the enclosing scope, resulting in non-serializable Props and possibly race conditions (breaking the actor encapsulation).



有人可以解释“关闭封闭范围”的含义吗?找遍了,一无所获。谢谢。

最佳答案

在这个例子中看到 new Actor 有点棘手。作为所谓的“按名称”参数传入。把它想象成一个类型为 () => Actor 的函数.每次在重新启动期间其主管将(重新)创建 actor 时,都会调用此函数。

问题是这个函数是一个“闭包”(对谷歌来说很容易;)),这意味着它捕获并记住它需要的周围范围内的所有东西(有时,但很少被称为“堆栈翻录”)。例如 val f = (a: Int) => a + x . x在哪里来自?它来自周围的范围。函数 litetal,分配给 f被称为“开放术语”。在运行时,函数字面量变成一个函数值(这是说“对象”的一种奇特方式),在执行时 关闭开放期限 ,同时捕捉周围范围内的一切。这就是“闭包”这个名字的由来。

闭包非常有用,但是你必须小心你关闭的东西。有时 xdef或上帝保佑var ,这会导致 f 出现不可预测的结果,因为您无法控制 f 的时间将被调用/执行。试试看!

Akka 中两种非常常见的反模式是:

  • 收尾(外)this创建 Actor 时的引用
    从内部类。
  • 收尾 def sender当回应
    一个有 future 的消息。

  • 我故意给了你一堆花哨的条款给谷歌,顺便说一句;)

    干杯和快乐的编码

    关于closures - "to close over the enclosing scope/class"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26901963/

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