问题标签 [eager]
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.
f# - 来自流阅读器的 F# 惰性评估?
我在代码中遇到了一个错误,这让我觉得我并不真正了解有关 F# 和惰性求值的一些细节。我知道 F# 急切地评估,因此对以下函数有些困惑:
当我在 FSI 中调用它时:
这让我觉得这getStringFromFile
是在懒惰地评估——所以我完全糊涂了。我对 F# 如何评估函数一无所知。
ruby-on-rails - Rails 急切加载和 kaminari
如何在使用 kaminari 分页时使用急切加载?我知道 kaminari 需要Relation
对象才能工作,如何使用 :include 检索模型并返回Relation
对象?
第二个问题,为什么 :include 为每个定义的模型创建 sql 查询而不是创建一个大的连接查询?
这是日志输出的内容Match.includes(:clans)
:
python - 如何立即运行生成器函数的初始化代码,而不是在第一次调用时?
我有一个生成器函数,它是这样的:
我希望在调用函数后立即运行初始化步骤(在 while 循环之前),而不是仅在第一次使用生成器时运行。有什么好方法可以做到这一点?
我想这样做是因为生成器将在单独的线程(或进程,或任何多处理使用)中运行,并且我不会在短时间内使用返回,并且初始化有点昂贵,所以我想要它在我准备使用这些值时进行初始化。
clojure - 为什么在 Clojure 中尝试使用辛普森规则时会出现转换错误?
我正在尝试使用 Clojure 完成 SICP 中的一些练习,但我当前执行辛普森规则的方法出现错误(例如 1-29)。这与懒惰/急切的评估有关吗?有想法该怎么解决这个吗?错误和代码如下:
java.lang.ClassCastException:user$simpson$h__1445 不能在 clojure.lang.Numbers.divide (Numbers.java:139) 处转换为 java.lang.Number
这是代码:
apache-flex - Flex-Cairngorm/Hibernate - EAGER 获取策略是否毫无意义?
我会尽量简洁。我正在为我的应用程序使用Flex/Hibernate技术。我还为 Flex 使用Cairngorm微架构。因为我是初学者,所以我可能误解了 Caringorm 的 ModelLocator 目的。我有以下问题...
假设我们有下一个数据模型:
用户可以启动很多主题,主题可以有很多评论等。这是一个非常简单的模型,例如。在休眠中,我使用 EAGER 获取策略来处理单向 USER->TOPIC 和 TOPIC->COMMENT 关系(这里没有关于最佳实践等的问题,这只是问题的示例)。
我的ModelLocator看起来像这样:
因为我使用急切获取,所以我可以“遍历”我的 Flex 客户端上的所有对象图,而无需访问数据库。只要我不需要插入、更新或删除某些域实例,就可以了。但是当这种情况发生时,同步问题就出现了。
例如,如果我想从某个 UserListView显示有关某个用户的详细信息,当用户(演员)在列表中选择该用户时,我将在 UserList 中获取选定的索引,从选定索引处的 ModelLocator 中的用户 ArrayCollection 获取元素并显示有关选定的详细信息用户。
当我想插入新用户时,好的,我将该用户保存在数据库中,并在 IResponder 结果方法中将该用户添加到 ModelLocator.users ArrayCollection 中。
但是,当我想为某个用户添加新主题时,如果我仍然想使用 EAGER 获取的便利,我需要再次重新加载用户列表......并将主题添加到选定的用户......如果用户在一些其他位置(间接),我也需要在那里插入主题。更新更糟糕。在那种情况下,我什至需要写一些逻辑......
我的问题:这是在 Cairngorm 中使用 ModelLocator 的好方法吗?在我看来,由于提到,EAGER fetching 在某种程度上是毫无意义的。在使用 EAGER fetching 的情况下,Flex 客户端上的同步可能会成为大问题。我应该总是点击数据库来操作我的域模型吗?
编辑: 似乎我没有让自己足够清楚。对不起。
好的,我在技术堆栈中也使用 Spring 和带有 flex/spring (de)serializer 的 DTO(DVO) 模式,但我只是想远离它,因为我试图指出你如何与数据库状态保持同步你的弹性应用程序。我什至没有提到多用户场景和轮询/推送主题,这也许是我的解决方案,因为我使用标准的请求-响应机制。我没有提供一些具体的代码,因为这对我来说似乎是概念性的问题,我使用标准的 Cairngorm 术语来解释我用于类名、变量名等的伪名。
我将尝试再次“简化”:您有用于管理上述域的 flex 客户端(每个域类的 CRUD),您有ListOfUsersView(显示用户列表及其基本信息),UserDetailsView(显示用户详细信息和用户主题列表,每个主题都有删除选项),InsertNewUserTopicView(插入新主题的表单)等。
每个显示一些信息的视图都与 ModelLocator 状态变量同步,例如:
视图状态转换如下所示:
因此,当我单击 ListOfUsersView 中的“详细信息”按钮时,在我的逻辑中,我在 ListOfUsers 中获取所选行的索引,之后我从用户获取 UserVO 对象:ModelLocator 中提到的索引处的ArrayCollection,之后我将该 UserVO 对象设置为 selectedUser :UserVO 在 ModelLocator 中,然后我将视图状态更改为 UserDetailsView(它显示用户详细信息和 selectedUser.topics),它与 ModelLocator 中的 selectedUser:UserVO 同步。
现在,我单击UserDetailsView 上的“插入新主题” 按钮,从而生成 InsertTopicView表单。我输入一些数据,点击“保存主题”(保存成功后,再次显示UserDetailsView)出现问题。
由于我 EAGER-ly 获取的对象,我没有在提到的转换中访问数据库,因此在为选定用户插入新主题时我需要关注两个地方:一个是用户中selectedUser对象的实例:ArrayCollection(因为我的逻辑从该集合中选择用户并在 UserDetailsView 中显示它们),第二个是selectedUser:UserVO(为了同步成功保存操作后的 UserDetailsView)。
所以,我的问题又出现了......我是否应该在每次转换中都点击数据库,我是否应该在保存后重新加载 users:ArrayCollection 和 selectedUser:UserVO 以便与 flex 客户端同步数据库状态,我是否应该在客户端保存主题,而不访问数据库,以编程方式传递我需要更新的所有地方或......?
在我看来,EAGER-ly 获取对象及其关联并不是一个好主意。我错了吗?
或者,再次“简化”:),在上述情况下您应该怎么做?所以,你需要处理点击“保存主题”按钮,现在是什么......?
再一次,我真的试图尽可能地解释这一点,因为我对此感到困惑。所以,请原谅我的长篇大论。
nhibernate - Fluent NHibernate Linq 复杂组件急切加载
我们在带有遗留数据库的项目中使用 Fluent NHibernate LINQ。我们的场景是我们有一个带有地址的客户信息表。我们在 C# 中将 Customer 和 Address 创建为单独的实体。地址再次引用邮政编码对象。
在映射时,我们将地址映射为客户的组件。现在我想在获取客户时急切加载邮政编码(由地址引用)以避免 N+1 选择。
当我尝试写Fetch(customer => customer.Address.ZipCode)
它时说它太复杂了。我不能这样做,Fetch(customer => customer.Address).ThenFetch(address => address.ZipCode)
因为地址与客户存储在同一个表中。
有什么办法可以解决这个问题吗?
java - HQL / 嵌套急切加载
我想知道为延迟加载的对象加载嵌套值的最佳方法是什么。我提供了一个示例来帮助更好地解释这一点。
作为一个例子,我想做:
如果我运行上面的语句,我会得到一个延迟加载异常。
我总是可以做到以下几点:
但显然性能会很糟糕。
有没有一种方法可以编写自定义 HQL 查询,该查询返回预先填充了这些特定嵌套字段的 A 对象?
谢谢!
entity-framework - 渴望加载多个相关实体
我需要向已经存在的 Repository 类添加一个可以处理多个 Include 的扩展方法:
当前的实现只能处理一个相关实体。我还需要能够急切地加载两个或更多相关实体。
我的实体类:
我将在哪里使用它:
谢谢!
java - Guice 急切/懒惰的单例实例化
我在理解 Guice 的单例实例化如何工作时遇到了一些麻烦。我已经阅读了可用的文档(这里 - http://code.google.com/p/google-guice/wiki/Scopes),但我仍然无法弄清楚一些事情:
我已将 Guice 与 Tomcat 集成,并在 ServletModule 中设置了一些绑定:
(其中 MyOtherServlet 类在其上方有一个 @Singleton 注释)我的意图是有两个 servlet,其中一个被急切地实例化,而另一个则没有。然而,似乎“服务...与...”行会自动实例化 servlet 对象,即使该类未绑定为急切的单例。我在上面附加的链接提到了在 Stage.Development 和 Stage.Production 下运行的 Guice 之间的区别 - 但是,即使我明确使用 Stage.Development (无论如何都是默认的),这种情况仍然发生。有没有办法避免这种情况?
(续 1)试图确保 MyServlet 首先被实例化,即使所有 servlet 现在都急切地实例化,我在创建 Injector 时修改了模块(和绑定语句)的顺序,以便 MyServlet 的绑定首先出现。但是,我发现它的实例化时间仍然比其他一些绑定(非 servlet 类的)晚,这些绑定的形式如下:
即使这些其他绑定稍后出现在模块/绑定顺序中。我研究了一下,发现 Guice 在执行“bind ... asEagerSingleton()”之前,只是简单地实例化了由“bind ... to ... asEagerSingleton()”形式绑定的热切单例,所以我通过修改这一行来解决它:
进入:
这确实有效。不过,我宁愿避免使用虚拟界面来解决这个问题,所以我想知道是否有人对此有更好的解决方案..?
我有两个 Guice 模块 - 一个 ServletModule 和一个 AbstractModule。ServletModule configureServlets() 中包含以下绑定:
serve("aUrl").with(SomeServlet.class); AbstractModule 的 configure() 具有以下绑定:
此外,SomeServlet 类有一个 SomeInterface 类型的注入字段,并且在类的顶部有一个 @Singleton 注释。
现在,人们会期望在创建注入器时, SomeImpl 类将被实例化,并且相同的实例将被注入到 SomeServlet 实例中。如前所述,以“serve...with...”语句为界的 servlet 似乎也被急切地实例化,但无论哪种方式,仍然应该只实例化一个 SomeImpl 对象。然而由于某种原因,我在执行此操作时实例化了两个 SomeImpl 对象。为了解决这个问题,我在 configure() 中混合了两行,而不是上面的,我有以下几行:
然后它工作得很好,我只实例化了一个 SomeImpl 实例。我真的不明白为什么开关应该很重要 - 我可以看到后一种方式如何“更好”,但我希望两者都能正常工作,所以我只是想知道我是否在这里遇到问题...... .
hibernate - 使用 fetch join 或 EAGER 来解决 hibernate multiple-bag-fetch-issue?
我有一个 A 类,它与 B 类和 C 类具有一对多的关系。我已将 fetchType 设置为 EAGER,这会导致 JPA 中的多包提取问题。现在有两种方法可以解决我所知道的问题。要么我保留获取类型 Eager 并将它们从 List 更改为 Set,这在我的情况下是可以的,或者将 fetchType 更改为“lazy”并使用连接查询来 EAGER 获取关系。推荐的方法是什么?