问题标签 [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.
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”之外还有另一种方法......甚至更糟,使用单独的查询每个模块。
python - 词法闭包是如何工作的?
当我在调查 Javascript 代码中的词法闭包问题时,我在 Python 中遇到了这个问题:
请注意,此示例有意避免lambda
. 它打印“4 4 4”,这令人惊讶。我期待“0 2 4”。
这个等效的 Perl 代码做得对:
打印“0 2 4”。
你能解释一下区别吗?
更新:
问题不在于i
全球化。这显示相同的行为:
如注释行所示,i
当时是未知的。尽管如此,它仍然打印“4 4 4”。
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.
hibernate - 休眠:LazyInitializationException:无法初始化代理
这是让我困惑的一个。我正在尝试实现一个基本的 Hibernate DAO 结构,但是遇到了问题。
这是基本代码:
它在第三个 assertTrue 上失败,它试图将 sf 中的值与 sf2 中的相应值进行比较。这是一个例外:
c#-3.0 - C# lambda 表达式和惰性求值
lambda 表达式的一个优点是您必须仅在需要函数结果时才对函数求值。
在以下(简单)示例中,仅在编写者存在时才评估文本函数:
不幸的是,这使得使用代码有点难看。你不能用常量或变量来调用它
并且必须这样称呼它:
编译器无法从传递的常量中“推断”出无参数函数。有没有计划在未来的 C# 版本中改进这一点,或者我错过了什么?
更新:
我自己发现了一个肮脏的黑客:
现在我可以将函数定义为:
并用函数或值调用它。
c++ - C++ 中的惰性求值
C++ 没有对惰性求值的本机支持(就像 Haskell 一样)。
我想知道是否有可能以合理的方式在 C++ 中实现惰性求值。如果是,你会怎么做?
编辑:我喜欢康拉德鲁道夫的回答。
我想知道是否有可能以更通用的方式实现它,例如通过使用参数化类lazy,它基本上适用于T,就像matrix_add 适用于矩阵一样。
对 T 的任何操作都会返回惰性。唯一的问题是将参数和操作代码存储在惰性本身中。谁能看到如何改善这一点?
haskell - 是否可以使用 WinHugs 打印 Haskell 中的所有缩减?
我编写了以下函数..并使用 WinHugs 执行
我的输出:
反正有没有打印所有的减少..所以我可以了解 WinHugs 内部发生的核心评估?
list - Ocaml List:实现追加和映射功能
我目前正在尝试扩展朋友的 OCaml 程序。这是一些数据分析所需的大量函数。由于我不是真正的 OCaml 破解者,因此我目前陷入(对我而言)奇怪的 List 实现:
我发现这实现了某种“惰性”列表,但我完全不知道它是如何工作的。我需要基于上述类型实现一个 Append 和一个 Map 函数。有没有人知道如何做到这一点?
任何帮助将不胜感激!
c# - 实现“LazyProperty”类 - 这是个好主意吗?
我经常发现自己编写了一个懒惰地评估的属性。就像是:
它的代码不多,但如果你有很多属性,它确实会重复很多。
我正在考虑定义一个名为 LazyProperty 的类:
这将使我能够像这样初始化一个字段:
然后属性的主体可以简化为:
这将被公司的大多数人使用,因为它将进入我们大多数产品共享的公共类库中。
我无法决定这是否是一个好主意。我认为这些解决方案有一些优点,例如:
- 更少的代码
- 更漂亮的代码
不利的一面是,查看代码并准确确定发生了什么会更加困难——尤其是在开发人员不熟悉 LazyProperty 类的情况下。
你怎么看 ?这是一个好主意还是我应该放弃它?此外,隐式运算符是一个好主意,还是如果您应该使用此类,您是否更愿意显式使用 Value 属性?
欢迎提出意见和建议:-)
java - 在 Java 中通过单元测试覆盖进行惰性“运行一次”初始化的方法
我正在寻找一段代码,它的行为有点像单例但不是(因为单例很糟糕:) 我正在寻找的必须满足这些目标:
- 线程安全
- 简单(理解和使用,即几行代码。库调用是可以的)
- 快速地
- 不是单身;对于测试,必须可以覆盖该值(并在测试后将其重置)。
- 本地(所有必要信息必须在一个地方)
- 惰性(仅在实际需要该值时运行)。
- 运行一次(RHS 上的代码必须执行一次且仅一次)
示例代码:
请注意,这些字段不是静态的;只有表达式的 RHS(右手边)是……在某种程度上是“静态的”。测试应该能够临时注入新i
值greet
。
另请注意,这段代码概述了我打算如何使用这个新代码。随意用任何东西替换 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 出现时的感觉一样,我们意识到我们所有的单例问题来自哪里以及如何解决它们。