标签: immutability

字符串不变性

字符串不变性是通过语句还是通过语句中的字符串来工作的?

例如,我了解以下代码将在堆上分配两个字符串.

string s = "hello ";
s += "world!";
Run Code Online (Sandbox Code Playgroud)

"你好"将留在堆上,直到垃圾收集; 现在引用"你好世界!" 在堆上.但是,以下行在堆上分配了多少个字符串... 1或2?此外,是否有工具/方法来验证结果?

string s = "goodbye " + "cruel world!";
Run Code Online (Sandbox Code Playgroud)

.net string immutability

12
推荐指数
1
解决办法
2313
查看次数

为什么Font不可变?

不可变的字体会使程序员和GC都感到困扰,因为每次都需要创建一个新实例.

为什么Font是一个不可变的引用类型呢?

c# fonts immutability

12
推荐指数
3
解决办法
1190
查看次数

如何使用ImmutableObjectAttribute?

我正在寻找一个内置属性来指定一个类型是不可变的,我只找到了 System.ComponentModel.ImmutableObjectAttribute.

使用Reflector,我检查了它的使用位置,似乎唯一使用它的公共类是System.Drawing.Image ... WTF?它可以用在string,int或任何基本类型上,但Image绝对不是不可变的,有很多方法可以改变它的内部状态(例如使用Graphics或Bitmap.SetPixel方法).

所以BCL中唯一明确声明为不可变的类可变的!或者我错过了什么?

.net immutability

12
推荐指数
2
解决办法
1630
查看次数

有没有办法阻止替换JavaScript对象属性?

我想使对象的结构不可变,防止其属性随后被替换.但是,属性需要是可读的.这可能吗?

我确信没有语言功能(final在Java和readonlyC#中都有)来支持这一点,但是想知道是否可能有另一种机制来实现相同的结果?

我正在寻找这些方面的东西:

var o = {
    a: "a",
    f: function () {
        return "b";
    }
};

var p = o.a;        // OK
o.a = "b";          // Error
var q = o.f();      // OK
o.f = function () { // Error
    return "c"; 
};
Run Code Online (Sandbox Code Playgroud)

javascript final immutability

12
推荐指数
3
解决办法
4184
查看次数

如何在Scala中初始化和"修改"循环持久数据结构?

我搜索并找到了有关此主题的一些信息,但答案要么令人困惑,要么不适用.

我有这样的事情:

class Thing (val name:String, val refs:IndexedSeq[Ref])
class Ref (val name:String, val thing:Thing)
Run Code Online (Sandbox Code Playgroud)

现在,我想说,加载一个文件,解析它并从中填充这个数据结构.它是不可变的和循环的,怎么会这样做?

另外,假设我确实填充了这个数据结构,现在我想修改它,比如更改rootThing.refs(3).name,怎么可能这样做呢?


感谢此处发布的想法.在这一点上,我在想如果一个人真的想要这样的东西的持久性数据结构,那就跳出框框思考并考虑客户端代码需要问什么问题.因此,不要考虑对象和字段,而应考虑查询,索引等.首先,我在想: 是否存在双向多图持久数据结构?

scala immutability cyclic-reference cyclic-graph

12
推荐指数
3
解决办法
1248
查看次数

为什么后期增量适用于包装类

我正在对一些代码进行审查,并且遇到了一个有人在增加一个成员变量的实例,该成员变量是一个围绕Integer的包装类.我亲自尝试过,真的很惊讶它有效.

Integer x = 0; 
System.out.print(x++ + ", ");
System.out.print(x);
Run Code Online (Sandbox Code Playgroud)

这打印出来0, 1,不像0, 0 我预期的那样.我查看了语言规范,找不到任何涉及此内容的内容.任何人都可以向我解释为什么它可以工作,如果它在多个平台上是安全的?我原本以为这会分解成

Integer x = 0;
int temp1 = x.intValue();
int temp2 = temp1 + 1;
System.out.println(temp1);
temp1 = temp2;
System.out.println(x.intValue());
Run Code Online (Sandbox Code Playgroud)

但显然规范中有些东西会在x = temp1;最后一行之前添加

java immutability post-increment

12
推荐指数
1
解决办法
3174
查看次数

PHP中的不可变对象?

创建无法在PHP中更改的对象是一个好主意吗?

例如,具有setter方法的日期对象,但它们将始终返回对象的新实例(具有修改日期).

这些对象是否会让使用该类的其他人感到困惑,因为在PHP中,您通常希望对象发生变化?

$obj = new Object(2);

$x = $obj->add(5); // 7
$y = $obj->add(2); // 4
Run Code Online (Sandbox Code Playgroud)

php class immutability

12
推荐指数
3
解决办法
2万
查看次数

Java字符串如何工作

我试图准确理解Java字符串是如何不可变的.我知道这可能是一个简单的概念,但在阅读了几个在线网页后,我仍然不太明白.

我不明白Java Strings是如何"不可变的".我目前有以下代码:

public static void main(String[] args) {

  String name = "Jacob Perkins";

  System.out.println( name );

  name = name + "!";

  System.out.println( name );

}
Run Code Online (Sandbox Code Playgroud)

我的输出如下:

Jacob Perkins
Jacob Perkins!
Run Code Online (Sandbox Code Playgroud)

如果字符串应该是不可变的,为什么会发生这种情况呢?为什么我能够为字符串重新赋值?

java string immutability

12
推荐指数
2
解决办法
655
查看次数

一个集合在Java中最终是什么意思?

在Java中声明最终集合意味着什么?难道不再添加任何元素吗?是否已经存在的元素无法改变?还有别的吗?

java collections final immutability

12
推荐指数
2
解决办法
8070
查看次数

有什么方法可以在lodash中使用immutable.js吗?

我在我的flux应用程序中使用了immutable.js.它非常有用,可以提升性能.但实际上让我感到难过的是我不能将lodash与它一起使用.Lodash提供了很棒的API,有很多有用的功能,所以我想也许有办法让它们在一起为我工作?

javascript immutability lodash reactjs immutable.js

12
推荐指数
3
解决办法
1万
查看次数