标签: immutability

如何使用until循环将不可变的Seq转换为可变的seq

我试图返回一个带有until循环的可变序列,但是我有一个不可变的seq返回(0到nbGenomes):

 def generateRandomGenome(nbGenomes:Int): IndexedSeq[GenomeDouble]={
    return ((0 until nbGenomes toSeq).map{e => generateRandomGenome}) 
  }
Run Code Online (Sandbox Code Playgroud)

返回编译错误:

found   : scala.collection.immutable.IndexedSeq[org.openmole.tools.mgo.mappedgenome.genomedouble.GenomeDouble]
 required: scala.collection.mutable.IndexedSeq[org.openmole.tools.mgo.mappedgenome.genomedouble.GenomeDouble]
    return ((0 until nbGenomes toSeq).map{e => generateRandomGenome}) 
Run Code Online (Sandbox Code Playgroud)

我如何强制until循环返回一个可变的seq?谢谢scala社区!

scala mutable immutability sequence

10
推荐指数
1
解决办法
6925
查看次数

功能/不可变数据结构是否仍然可用于非垃圾收集上下文中的并发?

不可变数据结构的一个卖点是它们可以自动并行化.如果没有发生突变,则可以在线程之间传递对函数数据结构的引用而不进行任何锁定.

我开始考虑如何在c ++中实现功能数据结构.假设我们在数据结构的每个节点上都有引用计数.(功能数据结构共享数据结构的旧成员和更新成员之间的结构,因此节点不会唯一属于一个特定数据结构.)

问题是如果在不同的线程中更新引用计数,那么我们的数据结构就不再是线程安全的.将互斥锁附加到每个节点都很昂贵,并且无法使用不可变数据结构进行并发.

有没有办法使并发不可变数据结构在c ++(和其他非垃圾收集环境)中工作?

c++ concurrency functional-programming immutability data-structures

10
推荐指数
1
解决办法
938
查看次数

将def与val用于常量值有什么含义

在Scala 中使用defvs. val来定义一个常量的不可变值有什么含义?我显然可以写下面的内容:

val x = 3;
def y = 4;
var a = x + y; // 7
Run Code Online (Sandbox Code Playgroud)

这两个陈述之间有什么区别?哪一个表现更好/是推荐的方式/更惯用?我何时会使用一个而不是另一个?

scala function idiomatic immutability

10
推荐指数
1
解决办法
981
查看次数

R:选择子集而不复制

有没有办法从对象(数据框,矩阵,向量)中选择一个子集而无需复制所选数据?

我使用相当大的数据集,但从不更改它们.然而,为方便起见,我选择要操作的数据子集.每次制作一个大的子集的副本是非常低效的内存,但是正常的索引和subset(以及因此xapply()的函数族)都创建了所选数据的副本.所以我正在寻找可以解决这个问题的功能或数据结构.

一些可能符合我需求的方法,并希望在一些R包中实现:

  • 写时复制机制,即仅在添加或重写现有元素时复制的数据结构;
  • 不可变数据结构,只需要为数据结构重新创建索引信息,而不是其内容(比如通过仅创建保存长度的小对象和指向同一个char数组的指针来从字符串中创建子字符串);
  • xapply() 不创建子集的类似物.

r subset immutability copy-on-write apply

10
推荐指数
1
解决办法
2144
查看次数

如何强制在Rust中将结构的字段始终保持不变?

在Rust中,您无需在内指定可变性struct,但它是从变量绑定继承的。很好,但是即使根是可变的,也可以强制字段始终不变吗?

像这样的假设语法:

struct A {
    immut s: Shape, // immutable by design
    bla: Bla, // this field inheriting (im)mutability
}
let mut a = make_a();
a.s = x/*...*/; // illegal
Run Code Online (Sandbox Code Playgroud)

就像Java一样,这将有助于在程序中保持良好的语义限制final(以非常有限的方式)。

同样,我们可以想象这种struct利用内部不变性对内部不变数据进行非所有权引用的情况...

immutability rust

10
推荐指数
3
解决办法
5180
查看次数

是否有一种简单的方法来创建一个类的不可变版本?

有一种简单的方法可以使实例不可变吗?

让我们举个例子,我有一个包含大量数据字段的类(只有数据,没有行为):

class MyObject
{
    // lots of fields painful to initialize all at once
    // so we make fields mutable :

    public String Title { get; set; }
    public String Author { get; set; }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

创建示例:

MyObject CreationExample(String someParameters)
{
    var obj = new MyObject
    {
        Title = "foo"
        // lots of fields initialization
    };

    // even more fields initialization
    obj.Author = "bar";

    return obj;
}
Run Code Online (Sandbox Code Playgroud)

但是现在我已经完全创建了我的对象,我不希望该对象再次变得可变(因为数据使用者永远不需要改变状态),所以我想要像List.AsReadOnly这样的东西:

var immutableObj = obj.AsReadOnly();
Run Code Online (Sandbox Code Playgroud)

但是如果我想要这种行为,我需要创建另一个具有完全相同字段但没有setter的类.

那么有没有自动生成这个不可变类的方法呢?或者在创建过程中允许可变性的另一种方法,但是一旦初始化就不可变?

我知道字段可以标记为"只读",但是对象将在类之外初始化,并且将所有字段作为构造函数参数传递似乎是一个坏主意(参数太多).

.net c# class immutability

10
推荐指数
1
解决办法
2203
查看次数

如何在Kotlin中创建一个不可变列表,它也是Java中的不可变列表?

我有一个Java/Kotlin互操作问题.一个Kotlin不可变列表被编译成一个可变的普通java.util.ArrayList!

Kotlin(图书馆):

class A {
  val items: List<Item> = ArrayList()
}
Run Code Online (Sandbox Code Playgroud)

Java(消费者):

A a = new A();
a.getItems().add(new Item());   // Compiles and runs but I wish to fail or throw
Run Code Online (Sandbox Code Playgroud)

如何从Java角度使我的Kotlin类完全不可变?

java immutability kotlin immutablelist

10
推荐指数
1
解决办法
7892
查看次数

高效实现不可变(双)LinkedList

读过这个问题是不可变的还是不可变的?并阅读我之前关于不变性的问题的答案,我仍然有点困惑有效实现简单的LinkedList是不可变的.在数组方面似乎很容易 - 复制数组并返回基于该副本的新结构.

据说我们有一个通用的Node类:

class Node{
    private Object value;
    private Node next;
}
Run Code Online (Sandbox Code Playgroud)

并基于上面的类LinkedList允许用户添加,删除等.现在,我们如何确保不变性?我们在插入元素时是否应该递归地复制对列表的所有引用?

我也对Immutable或不可变的答案感到好奇吗?提到了在二叉树的帮助下导致log(n)时间和空间的cerain优化.另外,我在某处读到,在前面添加一个元素也是0(1).这让我很困惑,好像我们没有提供参考文献的副本,然后实际上我们正在修改两个不同来源的相同数据结构,这打破了不变性......

您的任何答案是否都适用于双向链接列表?我期待着对任何其他问题/解决方案的任何回复/指示.在此先感谢您的帮助.

linked-list immutability data-structures

9
推荐指数
1
解决办法
8127
查看次数

如何在C#中使DateTime对象不可变(声明为const)?

我尝试了以下不起作用的代码

private const DateTime newDateTime = new DateTime(1,1,1,1,1,1);
Run Code Online (Sandbox Code Playgroud)

编译器声明"DateTime变量不能声明为const".

我想知道如何使这个对象不可变,因为我不想在任何地方错误地改变它.此值将用作检查值以比较其他DateTime对象.

谢谢你的帮助.

.net c# datetime const immutability

9
推荐指数
1
解决办法
2079
查看次数

.NET字符串真的应该被认为是不可变的吗?

请考虑以下代码:

unsafe
{
    string foo = string.Copy("This can't change");

    fixed (char* ptr = foo)
    {
        char* pFoo = ptr;
        pFoo[8] = pFoo[9] = ' ';
    }

    Console.WriteLine(foo); // "This can   change"
}
Run Code Online (Sandbox Code Playgroud)

这将创建一个指向第一个字符的指针,将其foo重新指定为变为可变,并将字符8和9的位置更改为' '.

注意我从未真正重新分配过foo; 相反,我通过修改其状态或改变字符串来改变其值.因此,.NET字符串是可变的.

这样做效果很好,事实上,以下代码:

unsafe
{
    string bar = "Watch this";

    fixed (char* p = bar)
    {
        char* pBar = p;
        pBar[0] = 'C';
    }

    string baz = "Watch this";
    Console.WriteLine(baz); // Unrelated, right?
}
Run Code Online (Sandbox Code Playgroud)

将打印"Catch this"由于字符串文字实习. …

.net c# string immutability

9
推荐指数
1
解决办法
249
查看次数