问题标签 [lazy-evaluation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
2461 浏览

sql - 如何查询多个 SQL 表以获取特定的键值对?

情况:具有多个可安装模块的 PHP 应用程序在数据库中为每个模块创建一个新表,样式为 mod_A、mod_B、mod_C 等。每个都有列 section_id。

现在,我正在寻找特定 section_id 的所有条目,我希望除了“Select * from mod_a, mod_b, mod_c ... mod_xyzzy where section_id=value”之外还有另一种方法......甚至更糟,使用单独的查询每个模块。

0 投票
10 回答
36586 浏览

python - 词法闭包是如何工作的?

当我在调查 Javascript 代码中的词法闭包问题时,我在 Python 中遇到了这个问题:

请注意,此示例有意避免lambda. 它打印“4 4 4”,这令人惊讶。我期待“0 2 4”。

这个等效的 Perl 代码做得对:

打印“0 2 4”。

你能解释一下区别吗?


更新:

问题在于i全球化。这显示相同的行为:

如注释行所示,i当时是未知的。尽管如此,它仍然打印“4 4 4”。

0 投票
22 回答
31888 浏览

haskell - Why is lazy evaluation useful?

I have long been wondering why lazy evaluation is useful. I have yet to have anyone explain to me in a way that makes sense; mostly it ends up boiling down to "trust me".

Note: I do not mean memoization.

0 投票
14 回答
207126 浏览

hibernate - 休眠:LazyInitializationException:无法初始化代理

这是让我困惑的一个。我正在尝试实现一个基本的 Hibernate DAO 结构,但是遇到了问题。

这是基本代码:

它在第三个 assertTrue 上失败,它试图将 sf 中的值与 sf2 中的相应值进行比较。这是一个例外:

0 投票
7 回答
7713 浏览

c#-3.0 - C# lambda 表达式和惰性求值

lambda 表达式的一个优点是您必须仅在需要函数结果时才对函数求值。

在以下(简单)示例中,仅在编写者存在时才评估文本函数:

不幸的是,这使得使用代码有点难看。你不能用常量或变量来调用它

并且必须这样称呼它:

编译器无法从传递的常量中“推断”出无参数函数。有没有计划在未来的 C# 版本中改进这一点,或者我错过了什么?

更新:

我自己发现了一个肮脏的黑客:

现在我可以将函数定义为:

并用函数或值调用它。

0 投票
12 回答
48442 浏览

c++ - C++ 中的惰性求值

C++ 没有对惰性求值的本机支持(就像 Haskell 一样)。

我想知道是否有可能以合理的方式在 C++ 中实现惰性求值。如果是,你会怎么做?

编辑:我喜欢康拉德鲁道夫的回答。

我想知道是否有可能以更通用的方式实现它,例如通过使用参数化类lazy,它基本上适用于T,就像matrix_add 适用于矩阵一样。

对 T 的任何操作都会返回惰性。唯一的问题是将参数和操作代码存储在惰性本身中。谁能看到如何改善这一点?

0 投票
3 回答
1726 浏览

haskell - 是否可以使用 WinHugs 打印 Haskell 中的所有缩减?

我编写了以下函数..并使用 WinHugs 执行

我的输出:

反正有没有打印所有的减少..所以我可以了解 WinHugs 内部发生的核心评估?

0 投票
3 回答
5495 浏览

list - Ocaml List:实现追加和映射功能

我目前正在尝试扩展朋友的 OCaml 程序。这是一些数据分析所需的大量函数。由于我不是真正的 OCaml 破解者,因此我目前陷入(对我而言)奇怪的 List 实现:

我发现这实现了某种“惰性”列表,但我完全不知道它是如何工作的。我需要基于上述类型实现一个 Append 和一个 Map 函数。有没有人知道如何做到这一点?

任何帮助将不胜感激!

0 投票
10 回答
644 浏览

c# - 实现“LazyProperty”类 - 这是个好主意吗?

我经常发现自己编写了一个懒惰地评估的属性。就像是:

它的代码不多,但如果你有很多属性,它确实会重复很多。

我正在考虑定义一个名为 LazyProperty 的类:

这将使我能够像这样初始化一个字段:

然后属性的主体可以简化为:

这将被公司的大多数人使用,因为它将进入我们大多数产品共享的公共类库中。

我无法决定这是否是一个好主意。我认为这些解决方案有一些优点,例如:

  • 更少的代码
  • 更漂亮的代码

不利的一面是,查看代码并准确确定发生了什么会更加困难——尤其是在开发人员不熟悉 LazyProperty 类的情况下。

你怎么看 ?这是一个好主意还是我应该放弃它?此外,隐式运算符是一个好主意,还是如果您应该使用此类,您是否更愿意显式使用 Value 属性?

欢迎提出意见和建议:-)

0 投票
4 回答
4682 浏览

java - 在 Java 中通过单元测试覆盖进行惰性“运行一次”初始化的方法

我正在寻找一段代码,它的行为有点像单例但不是(因为单例很糟糕:) 我正在寻找的必须满足这些目标:

  1. 线程安全
  2. 简单(理解和使用,即几行代码。库调用是可以的)
  3. 快速地
  4. 不是单身;对于测试,必须可以覆盖该值(并在测试后将其重置)。
  5. 本地(所有必要信息必须在一个地方)
  6. 惰性(仅在实际需要该值时运行)。
  7. 运行一次(RHS 上的代码必须执行一次且仅一次)

示例代码:

请注意,这些字段不是静态的;只有表达式的 RHS(右手边)是……在某种程度上是“静态的”。测试应该能够临时注入新igreet

另请注意,这段代码概述了我打算如何使用这个新代码。随意用任何东西替换 runOnce() 或将其移动到其他地方(构造函数,也许,或 init() 方法或 getter)。但是 LOC 越少越好。

一些背景资料:

我不是在寻找 Spring,而是在寻找一段可用于最常见情况的代码:您需要实现一个接口,除了您想要的测试之外,永远不会有第二个实现传入模拟对象。此外,Spring 失败了 #2、#3 和 #5:您需要学习配置语言,您必须在某处设置应用程序上下文,它需要 XML 解析器并且它不是本地的(信息遍布各处)。

由于#5,全局配置对象或工厂不符合要求。

static final因为#4而出局(不能改变决赛)。static由于类加载器问题而有异味,但您可能需要在里面使用它runOnce()。我只是希望能够在表达式的 LHS 中避免它。

一种可能的解决方案可能是将ehcache与默认设置一起使用,该设置将返回相同的对象。由于我可以将内容放入缓存中,因此这也允许随时覆盖该值。但也许有比 ehcache 更紧凑/简单的解决方案(它再次需要 XML 配置文件等)。

[编辑] 我想知道为什么这么多人不赞成这个。这是一个有效的问题,用例很常见(至少在我的代码中)。因此,如果您不理解问题(或其背后的原因),或者您没有答案或不在乎,为什么要投反对票?:/

[EDIT2] 如果您查看 Spring 的应用程序上下文,您会发现超过 99% 的所有 bean 都只有一个实现。你可以拥有更多,但在实践中,你根本没有。因此,我没有分离接口、实现和配置,而是在寻找只有一个实现(在最简单的情况下)、一个 current() 方法和一两行聪明的代码来初始化 current() 的结果的东西一次(第一次调用时)但同时允许覆盖结果(如果可能,线程安全)。把它想象成一个原子的“if(o==null) o = new O(); return o”,你可以在其中覆盖 o。也许 AtomicRunOnceReference 类是解决方案。

现在,我只是觉得我们每天都拥有和使用的并不是最佳的,有一个莫名其妙的解决方案会让我们都拍脑袋说“就是这样”。就像我们几年前 Spring 出现时的感觉一样,我们意识到我们所有的单例问题来自哪里以及如何解决它们。