问题标签 [mutable]

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

string - 对于字符串,“可变”与“可修改”一词相同吗?

当我们谈论字符串是可变的时,这是否与使用单词“可更改”或“可修改”同义,或者是否有一些额外的细微差别来解释为什么使用这个行话而不是像“可修改”这样更简单的词?

0 投票
4 回答
3432 浏览

cocoa - 将 NSMutableArray 传递给其他类

我在类 loginController 的实现中创建了一个 NSMutableArray。可变数组包含一组字符串。我想将可变数组及其对象传递给我的可可项目中的其他类。传递数组的最佳方法是什么?

0 投票
2 回答
1562 浏览

language-design - 可变或不可变闭包

在命令式、面向对象的语言中,具有可变或不可变闭包是否更有意义?

例如:

如果闭包是可变的,这将打印:

如果它是不可变的,它将打印:

我意识到即使使用不可变的闭包,您仍然可以这样做:

那么,拥有可变闭包或不可变闭包会更好,还是两者都有选择?不可变闭包似乎更容易实现,所以在这一点上,我想我会继续这样做,除非有充分的理由不这样做。

0 投票
3 回答
346 浏览

reference - 可变值对象/共享状态(和啤酒酿造!)

我是一个生疏的程序员,试图再次在该领域学习。我断断续续地发现,我的自学和正规教育都导致了一些坏习惯。因此,我试图让我的思想围绕良好的设计模式,以及——通过扩展——当它们是错误的。语言是 Java,这是我的问题:

我正在尝试编写软件来协助啤酒酿造。在酿造过程中,有时您必须用特定种类的啤酒花代替配方中要求的啤酒花。例如,您可能有一个需要“阿马里洛”啤酒花的配方,但您只能得到“Cascade”,它具有足够相似的香气,可以替代;啤酒花具有一定量的 Alpha 酸(每给定质量),两种啤酒花之间的比率是替代公式的一部分。我正在尝试在我的程序中(正确地)对此进行建模。

我最初的目标是拥有两个对象。一个 a HopVariety,它具有关于各种啤酒花的一般描述信息,一个 a HopIngredient,它是 a 的特定实例,HopVariety还包括给定配方中使用的量。HopIngredient应该知道它的多样性,并且HopVariety应该知道什么可以用作它的替代品(并非所有替代品都是对称的)。这似乎是好的 OOP。

问题是这样的:我正在尝试遵循良好的做法并使我的价值对象不可变。(在我的脑海中,我将其归类HopVarietyHopIngredient价值对象,而不是“演员”。)但是,我需要用户能够使用新的可行替换来更新给定的 HopVariety。如果我遵循不变性,这些更改将不会传播到单个成分。如果选择可变性,我会通过共享可变值对象潜在地引入副作用而表现不佳。

因此,选项 B:引入各种类型的 VarietyCollection,并通过名称或唯一标识符松散地耦合成分和品种。然后是 VarietySubstitutionManager,这样品种就不会引用其他品种,而只会引用它们的 id。这与我想要做的背道而驰,因为持有对品种对象的引用具有直观意义,现在我要介绍感觉像是过度抽象的东西,并将函数与数据分开。

那么,我如何在特定实例之间正确共享状态?解决问题的正确或至少最明智的方法是什么?

0 投票
7 回答
2118 浏览

c++ - C++ mutable 在这种情况下合适吗?

我想问一下这里使用 mutable 是否合适:

Base 类是第 3 方库。我正在扩展它以提供我自己的 NoMod()。库原始 NoMod() 被声明为 const。

我的 NoMod() 与 Base 的不同之处在于它需要修改自己的成员变量。

因此,为了让我自己的 NoMod() 编译并在调用 Draw() 时被调用,我必须

1) 将 Derive::NoMod() 实现为 const
2) 使我的 int y 可变。

这是我能做的最好的吗?

0 投票
3 回答
472 浏览

ruby - C++ 常量的 Ruby 等价物?

我在业余时间学习 Ruby,我有一个关于常量语言结构的问题。Ruby 是否有等效的 C++ const 关键字来防止变量被修改?这是一些示例代码:

我想将 column_count 声明为 const,因为我在下面的程序中使用它,我真的不想错误地修改它。Ruby 是否为此提供了一种语言结构,还是我应该接受它并意识到我的变量总是可变的?

回复评论:

“我猜,变量“意外”覆盖的最可能原因是长代码块。我同意你的观点的精神,但不同意这封信。您关于避免长代码块和不必要状态的观点是一个很好的观点,但对于常量也可以用于描述实现内部的代码设计。我的代码中 const 的很大一部分价值来自于注释哪些变量我应该更改,哪些我不应该更改,因此如果我明年回到我的代码,我不会想更改它们。这与暗示由于良好的变量名和清晰的缩进而使用简短注释的代码比由详细注释解释的笨拙编写的代码更好的观点相同。

另一个选项似乎是 Ruby 的 #freeze 方法,我也喜欢它的外观。感谢大家的回复。

0 投票
3 回答
211 浏览

memory - 何时从堆中释放可变状态值?

封装可变状态部分的 F# WikiBook 上,有以下代码片段。

起初,似乎很容易接受这样一个事实,即每次调用可变counter值都会递增。incr

但是想了一会儿,我无法理解的是什么时候counter从堆中释放出来,以及counter在递增之前如何仍然引用先前的值。它是如何通过多个函数调用counter在函数范围内生存的?incr

所以主要问题是:

  • 什么时候counter从堆中释放出来?
  • 不是counter内存泄漏吗?
0 投票
4 回答
780 浏览

c++ - 处理 C++ 类中的惰性计算

假设我有一堂课:

Whereinsert()添加一个元素到easySet_. difficultSet_的成员根据 的成员而变化easySet_

我遇到的问题是,多次插入意味着difficultSet_不断重新计算。所以我想difficultSet_被懒惰地计算(即只有当difficultBegin(), difficultEnd(), ordifficultSize()被调用时)。问题是,那我其实得把它difficultSet_弄成一个mutable,否则difficultSize()不能对它进行操作。

所以现在我的班级声明看起来像

我觉得这是一个糟糕的设计。有没有更好的办法?

0 投票
4 回答
2667 浏览

c# - 并行应用程序的可变与不可变

在我正在编写的应用程序中,我需要编写许多基本类型,它们很可能是不可变的。但我想知道如何将并行应用程序中的可变类型与不可变类型进行比较。

您可以对可变对象使用锁,对吗?它与并行应用程序中使用不可变类型的其他技术相比如何?

你至少远离使用不可变类型的锁,对吧?

0 投票
3 回答
1680 浏览

reflection - F# 可变到不可变

全部,

我最近一直在涉足一些 F#,我想出了以下我从一些 C# 代码中移植的字符串生成器。它将对象转换为字符串,前提是它传递了属性中定义的正则表达式。对于手头的任务,它可能有点矫枉过正,但出于学习目的。

目前,BuildString 成员使用可变字符串变量 updatedTemplate。我一直在绞尽脑汁想办法在没有任何可变对象的情况下做到这一点,但无济于事。这让我想到了我的问题。

是否可以在没有任何可变对象的情况下实现 BuildString 成员函数?

干杯,

迈克尔