问题标签 [lazy-initialization]

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 投票
1 回答
4996 浏览

python - 如何为属性的延迟初始化创建装饰器

我想创建一个像属性一样工作的装饰器,只是它只调用一次装饰函数,并且在后续调用中总是返回第一次调用的结果。一个例子:

我的想法是为此编写一个自定义装饰器。所以我开始了,这就是我走了多远:

如您所见,我不知道在哪里存储缓存值。最简单的解决方案似乎只是维护一本字典,但我想知道是否有更优雅的解决方案。

编辑对不起,我忘了提到我希望该属性是只读的。

0 投票
4 回答
623 浏览

nhibernate - NHibernate:从存储库返回完全加载实例的模式

作为我无尽的受 NHibernate 启发的 DAL 重构炼狱的一部分,我已经开始使用存储库模式来使 NHibernate 远离我的 UI 层。这是来自存储库的 Load 方法的示例。

我喜欢我的网站不知道什么是 ISession 的事实。

自然,我开始遇到延迟初始化异常,因为上面的方法没有加载 StoredWill,它只是返回一个代理。当您访问代理的属性时,您会收到异常,因为您不再处于 ISession 的范围内。当我意识到发生了什么事时,我放声大笑。

我已经解决了这个问题:

但这一切似乎有点。有没有人使用稍微优雅一点的模式?

爱你们。

大卫

0 投票
6 回答
21422 浏览

scala - scala中的惰性函数定义

我一直在学习 scala,我不得不说这是一门非常酷的语言。我特别喜欢它的模式匹配功能和函数文字,但我来自 javascript、ruby 背景,我最喜欢这些语言的模式之一是惰性函数和方法定义模式。javascript中的一个例子是

稍加调整的相同代码在 ruby​​ 中工作,您只需在执行计算后使用单例对象重新定义方法。当涉及昂贵的计算并且您不提前知道是否需要结果时,这种事情非常方便。我知道在 scala 中我可以使用缓存来模拟相同类型的结果,但我试图避免条件检查,到目前为止我的实验返回了否定结果。有谁知道scala中是否有惰性函数或方法定义模式?

注意:javascript 代码来自 Peter Michaux 的网站

0 投票
3 回答
774 浏览

c# - 为什么属性被延迟实例化?

我发现 C# 中的属性似乎是延迟实例化的。

在此示例中,创建一个新A实例会导致 a StackOverflowException,但如果我删除对GetCustomAttributes(),则执行会正常进行。

为什么是这样?对我来说更有意义的是,当它们装饰的类是属性时,它们会被正确初始化。

0 投票
3 回答
1611 浏览

iphone - 访问器/获取器和延迟初始化

我有一个关于覆盖自动生成的访问器方法的问题。以下方法不起作用(我相信),因为每个 getter 都引用了另一个 getter。有没有规定访问器方法不应该使用其他访问器方法,或者您只需要单独注意这些情况?

我必须强调,这里介绍的图像使用只是一个示例,在这个特定示例中关于做什么的想法不如在一般情况下重要。

0 投票
4 回答
5312 浏览

objective-c - Objective-C 中的延迟加载 - 我应该从 getter 中调用 setter 吗?

这是一个小细节,但每次我懒加载某些东西时,我都会陷入困境。这两种方法都可以接受吗?哪个更好?假设变量具有保留属性。

方法#1

方法#2

首先,我不确定在访问器中访问另一个访问器函数是否可以(但不明白为什么不这样做)。但是,如果setter做了一些特殊的事情(或者如果属性更改为retain之外的东西并且没有检查getter),似乎在不通过setter的情况下设置类变量可能同样糟糕。

0 投票
1 回答
2048 浏览

c# - 为什么 RelayCommands 通常使用延迟初始化?

使用 Josh Smith 的RelayCommand时,我见过的大多数示例都使用延迟初始化,例如:

而不是在构造函数中创建 RelayCommand,如下所示:

在这里使用延迟初始化有什么好处?在设置绑定时它必须调用 get 属性,所以我看不出有理由使用这个方法而不是在构造函数中进行设置。

我在这里错过了什么吗?

0 投票
2 回答
3336 浏览

java - 过滤延迟初始化的 Hibernate 集合

这可能是一个非常简单的答案,因为我相信这并不少见。我看到一些类似的问题,但似乎没有什么可以描述我的问题。

我有两个对象:一辆车和一个人。它们是多对多的关系,即一辆汽车可以由多个人拥有,而一个人可以拥有多辆汽车。 Car有一组惰性初始化Drivers

我想找到车主在 25 岁以下的所有蓝色汽车:

我的问题是当我遍历列表并调用getDrivers()每辆车时,它会初始化集合并获取该车的所有驱动程序。我猜.list()我跑的并没有在每辆车上设置结果。

如果我手动运行正在生成的 SQL 休眠,我会得到我期望的结果,所以我有理由确定标准不是问题。

我可以理解为什么会发生这种情况,但我不确定如何在不遍历每辆车并为每辆车运行驱动程序的情况下绕过它。如果可能的话,我想避免这样做,并希望得到任何建议。

提前致谢!

0 投票
4 回答
959 浏览

java - Hibernate -> LazyInitializationException 与 n:m 关系

我对 Hibernate 和 LazyInitializationException 有疑问。我搜索并找到了很多答案,但我不能用它们来解决我的问题,因为我不得不说,我是 Hibernate 的新手。

我运行 JUnit 测试,以防出现以下错误:

最后显示的行:

抛出此错误:

Person 和 Project 是双向的 n:m:

人.java

项目.java

所以有什么问题?

0 投票
2 回答
3877 浏览

java - Spring 事务和休眠:延迟初始化

从我到目前为止所读到的内容中,我了解到使用事务将是解决 hibernate 延迟加载问题的解决方案。该会话将在服务层的整个事务期间可用,无需进一步说明。

所以也许我错误地配置了我的事务管理?在春季和休眠方面,我实际上是一个新手,但也许你们可以帮助我。

我的配置:

我的 DAO 实现只需要一个@Repository注解和一个Hibernate-template使用自动装配注入的 bean。

服务实现的典型标头是:

@Service(readOnly=false)如果在该特定方法中实际保存/更新了任何内容,则使用注释。

我是否需要配置其他内容以确保我可以在我的服务中加载正确的关联,或者这通常由事务处理?

现在我对我应该做什么有点困惑,所以请帮助我:)