gpt4 book ai didi

Scala:镜头与可变设计

转载 作者:行者123 更新时间:2023-12-01 23:29:18 25 4
gpt4 key购买 nike

我对透镜的基本认识is that ,“透镜是表示复杂类型与其成分之一之间映射的值。该映射可以双向工作——我们可以获取或“访问”成分并设置或“改变”它”

我在设计机器学习库(神经网络)时遇到了这个问题,它需要保留一个大的参数数据结构,其中的参数组需要在算法的不同阶段进行更新。我想创建不可变的整个参数数据结构,但更改一组参数需要复制所有参数,并重新创建一个新的数据结构,这听起来效率很低。不足为奇other people have thought它也。有些人建议使用 lensing,从某种意义上说,它可以让你修改不可变的数据结构。而其他一些人建议只对这些使用可变变量。不幸的是,我找不到任何关于比较这两种范例的东西,速度方面、空间方面、代码复杂性方面等等。

现在的问题是,使用透镜与可变设计的优缺点是什么?

最佳答案

两者之间的取舍与您猜测的差不多。 Lenses 没有手动跟踪大型不可变数据结构的变化那么复杂,但仍然需要比可变数据结构更复杂的代码,并且存在一定的运行时开销。要知道有多少,您必须测量,但它可能比您想象的要少,因为很多更新的结构不是复制而是共享

可变数据结构更简单,修改起来也更快,但更难推理,因为现在您必须考虑调用函数的顺序,担心并发性,等等。

你的第三个选择是制作一堆小的不可变数据结构而不是一个大的。由于需要单一的真实来源,并确保所有对数据的引用同时发生变化,可变性通常会强制使用单一的大型数据结构。有了不变性,这就更容易控制了。

例如,您可以拥有两个具有相同类型键和不同类型简单值的单独 Map,而不是一个具有更复杂值的 Map。这不仅具有性能优势,还可以更轻松地模块化代码。

关于Scala:镜头与可变设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42121277/

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