jjzjj

immutability

全部标签

javascript - Immutable.js:如何通过指定属性值在数组中查找对象

我有一个由Immutable.js制作的数组:vararr=Immutable.List.of({id:'id01',enable:true},{id:'id02',enable:true},{id:'id03',enable:true},{id:'id04',enable:true});如何找到id:id03的对象?我想更新它的enable值并获得一个新数组 最佳答案 首先你需要findIndex,然后update你的list。constindex=arr.findIndex(i=>i.id==='id03')constnewAr

javascript - javascript 中的不可变类型

在我看来,不可变类型在Javascript中是不可能的,或者有人知道创建它们的任何技巧吗?这是好事还是坏事?例如,varPoint2D=functionPoint2D(x,y){var_x=x;var_y=y;functionconstructor(){varself={};//Pseudo-Immutableconceptself.x=function(){return_x;}();self.y=function(){return_y;}();returnself;}returnconstructor();}这当然不是真正不可变的,但如果它是1)充分证明属性'x'和'y'是gette

javascript - 是否有不可变版本的 Object.assign?

我想在JavaScript中混合两个对象:leta={x:1,y:2,z:3};letb={x:10,y:20};letc=Object.assign(a,b);这给出了c的正确值:Object{x:10,y:20,z:3}但是现在a也被修改了!Object{x:10,y:20,z:3}有没有办法将a分配给b到一个新对象中? 最佳答案 assign的第一个参数是目标。所以它会被改变。如果您不想更改任何源,您可以简单地为目标传递一个空对象:leta={x:1,y:2,z:3};letb={x:10,y:20};letc=Object.

javascript - Immutable.js 数据结构的自定义相等语义

我想要Sanctuary提供FantasyLand-具有基于值的相等语义的兼容Map和Set类型。理想情况下,这些值是不可变的,但这并不重要,因为Sanctuary会提供用于合并和以其他方式操纵这些值的纯函数。我很乐意利用Immutable.js所做的出色工作团队;我想实现持久数据结构需要付出相当大的努力!Immutable.js提供的API并不重要,因为Sanctuary会公开与这些值交互的函数。不过,这些类型的相等语义至关重要。这对我的用例来说是NotAcceptable:>Map([[[1,2,3],'foo'],[[1,2,3],'bar']])Map{[1,2,3]:"foo

javascript - immutable.js 过滤和变异(删除)找到的条目

我有两个循环,一个用于每个月的每一天,另一个用于本月的所有事件。假设我有100000个事件。我正在寻找一种方法来从主要事件List中删除事件,一旦它们被“消耗”。代码是这样的:constcalendarRange=[{initialDate},{initialDate},{initialDate},{initialDate},...]//saywehave30dates,oneforeachdayconstevents=fromJS([{initialDate},{initialDate},{initialDate},...])//let'ssaywehave100000calenda

javascript - TypeScript 返回不可变/常量/只读数组

我想要一个返回数组的函数,但我希望返回的数组是只读的,所以当我尝试更改其内容时应该会收到警告/错误。functiongetList():readonlynumber[]{return[1,2,3];}constlist=getList();list[2]=5;//Thisshouldresultinacompileerror,thereturnedlistshouldneverbechanged这可以在TypeScript中实现吗? 最佳答案 这似乎可行...functiongetList():ReadonlyArray{retur

C# - 如何使用 LINQ to Objects 创建不可变对象(immutable对象)

我正在使用LINQ通过解析XDocument中的值来创建一个对象。我的理解是,除非您以后确实需要更改值,否则应该将对象创建为不可变的,因此我制作了私有(private)setter。publicclassGeoLookupResult{publicstringLocationType{get;privateset;}publicstringCountry{get;privateset;}publicstringCountryIso3166{get;privateset;}publicGeoLookupResult(stringlocationType,stringcountry,str

xml - 为什么 XML 文字在 Scala 中产生可变对象?

当在Scala中将节点序列声明为文字时,您会生成一个可变的scala.xml.NodeBuffer(它扩展了ArrayBuffer[scala.xml.Node],它在依次扩展Seq[scala.xml.Node]):scala>valxml=xml:scala.xml.NodeBuffer=ArrayBuffer(,)scala>xml+=res46:xml.type=ArrayBuffer(,,)scala>xmlres47:scala.xml.NodeBuffer=ArrayBuffer(,,)这与Scala使用不可变对象(immutable对象)和函数式编程的哲学相矛盾。为什么

c# - C#中如何证明字符串的不变性?

在我上次c#面试中,我被要求证明C#字符串的不可变性,我知道c#字符串的不可变性是什么意思,但是是否可以通过代码证明c#字符串的不可变性?请给我一个示例代码片段。提前致谢 最佳答案 我可以证明string是不是不可变的。我需要做的就是显示一些改变string的代码,如下所示:usingSystem;usingSystem.Runtime.InteropServices;namespaceDemo{classProgram{staticvoidMain(string[]args){conststringtest="ABCDEF";//

c# - Roslyn 的发布版本如何实现不可变树?

我知道Roslyn的预发布版本实现了不可变树,如thisexcellentblogpost中所述。埃里克·利珀特着。但是,该帖子以:Thecostisthatthissystemiscomplexandcanconsumealotofmemoryifthe"red"facadesgetlarge.Weareatpresentdoingexperimentstoseeifwecanreducesomeofthecostswithoutlosingthebenefits.我想问一下发布版本的结果如何。我已经开始检查Roslynsources但是代码相当复杂,难以理解。我感兴趣的是关于上述成