草庐IT

Immutability

全部标签

Swift 使方法参数可变?

如何在不创建额外变量的情况下处理这个错误?funcreduceToZero(x:Int)->Int{while(x!=0){x=x-1//ERROR:cannotassignto'let'value'x'}returnx}我不想创建额外的变量来存储x的值。甚至可以做我想做的事吗? 最佳答案 如其他答案所述,从Swift3开始,将var放在不推荐使用的变量之前。尽管其他答案中未说明能够声明inout参数。想想:传递一个指针。funcreduceToZero(_x:inoutInt){while(x!=0){x=x-1}}vara=3r

Swift 使方法参数可变?

如何在不创建额外变量的情况下处理这个错误?funcreduceToZero(x:Int)->Int{while(x!=0){x=x-1//ERROR:cannotassignto'let'value'x'}returnx}我不想创建额外的变量来存储x的值。甚至可以做我想做的事吗? 最佳答案 如其他答案所述,从Swift3开始,将var放在不推荐使用的变量之前。尽管其他答案中未说明能够声明inout参数。想想:传递一个指针。funcreduceToZero(_x:inoutInt){while(x!=0){x=x-1}}vara=3r

c# - 为什么 C# 数字类型是不可变的?

为什么int和double是不可变的?每次要更改值时返回一个新对象的目的是什么?我问的原因是因为我正在制作一个类:BoundedInt,它有一个值和一个上限和下限。所以我想知道:我是否也应该使这种类型不可变?(或者它应该是一个struct吗?) 最佳答案 首先:Whatisthepurposeofreturninganewobjecteachtimeyouwanttochangethevalue?我认为您可能误解了值类型的工作原理。这并不像您想象的那样昂贵的操作;它只是数据的覆盖(与动态分配新内存相反)。其次:这里有一个非常简单的例

c# - 为什么 C# 数字类型是不可变的?

为什么int和double是不可变的?每次要更改值时返回一个新对象的目的是什么?我问的原因是因为我正在制作一个类:BoundedInt,它有一个值和一个上限和下限。所以我想知道:我是否也应该使这种类型不可变?(或者它应该是一个struct吗?) 最佳答案 首先:Whatisthepurposeofreturninganewobjecteachtimeyouwanttochangethevalue?我认为您可能误解了值类型的工作原理。这并不像您想象的那样昂贵的操作;它只是数据的覆盖(与动态分配新内存相反)。其次:这里有一个非常简单的例

c# - 如果委托(delegate)是不可变的,为什么我可以做 x += y 这样的事情?

阅读C#InDepth,第2版,第2.1.2节关于合并和删除委托(delegate)。小节标题指出“委托(delegate)是不可变的”并且“关于它们的任何内容都不能更改”。不过,在下一段中,它讨论了使用像这样的结构x+=y;其中x和y是兼容委托(delegate)类型的变量。我不是刚刚更改了x吗?或者当我这样做时(即立即)处置x时,不变性部分是否处理? 最佳答案 这就像做:stringx="x";stringy="y";x+=y;字符串也是不可变的。上面的代码没有更改字符串objects-它将x设置为不同的值。您需要区分变量和对象

c# - 如果委托(delegate)是不可变的,为什么我可以做 x += y 这样的事情?

阅读C#InDepth,第2版,第2.1.2节关于合并和删除委托(delegate)。小节标题指出“委托(delegate)是不可变的”并且“关于它们的任何内容都不能更改”。不过,在下一段中,它讨论了使用像这样的结构x+=y;其中x和y是兼容委托(delegate)类型的变量。我不是刚刚更改了x吗?或者当我这样做时(即立即)处置x时,不变性部分是否处理? 最佳答案 这就像做:stringx="x";stringy="y";x+=y;字符串也是不可变的。上面的代码没有更改字符串objects-它将x设置为不同的值。您需要区分变量和对象

c# - 什么是 C# 的 "moSTLy complete"(im) 可变性方法?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭5年前。Improvethisquestion尽管CLR中提供了一些支持,但由于不可变性并未完全融入C#到F#的程度,或者完全融入框架(BCL),那么C#的(不)可变性的相当完整的解决方案是什么?我的优先顺序是一个解决方案,由与以下内容兼容的一般模式/原则组成一个单一的开源库,几乎没有依赖性少量互补/兼容的开源库商业的东西那个涵盖了Lippert的各种immutability提供不错的性能(我知道这很模糊)支持序列化支持克隆/复制(深/浅/部分?)在

c# - 什么是 C# 的 "moSTLy complete"(im) 可变性方法?

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭5年前。Improvethisquestion尽管CLR中提供了一些支持,但由于不可变性并未完全融入C#到F#的程度,或者完全融入框架(BCL),那么C#的(不)可变性的相当完整的解决方案是什么?我的优先顺序是一个解决方案,由与以下内容兼容的一般模式/原则组成一个单一的开源库,几乎没有依赖性少量互补/兼容的开源库商业的东西那个涵盖了Lippert的各种immutability提供不错的性能(我知道这很模糊)支持序列化支持克隆/复制(深/浅/部分?)在

c# - 为什么不可变对象(immutable对象)是线程安全的?

classUnit{privatereadonlystringname;privatereadonlydoublescale;publicUnit(stringname,doublescale){this.name=name;this.scale=scale,}publicstringName{get{returnname;}}publicstringScale{get{returnscale;}}privatestaticUnitgram=newUnit("Gram",1.0);publicUnitGram{get{returngram;}}}多个线程可以访问Unit.Gram。为什

c# - 为什么不可变对象(immutable对象)是线程安全的?

classUnit{privatereadonlystringname;privatereadonlydoublescale;publicUnit(stringname,doublescale){this.name=name;this.scale=scale,}publicstringName{get{returnname;}}publicstringScale{get{returnscale;}}privatestaticUnitgram=newUnit("Gram",1.0);publicUnitGram{get{returngram;}}}多个线程可以访问Unit.Gram。为什