标签: immutability

不可变是一个记忆猪吗?

假设我们有一个类似于内存的类Image,有可链接的方法,比如Resize()ConvertTo().

如果这个类是不可变的,那么当我开始做类似的事情时,它会不会占用大量的内存i.Resize(500, 800).Rotate(90).ConvertTo(Gif),相比之下,一个可变的自我修改?如何用函数式语言处理这种情况?

memory functional-programming immutability

27
推荐指数
2
解决办法
3428
查看次数

List.empty与List()与新List()

什么区别List.empty,List()new List()?我什么时候应该使用哪个?

collections scala list immutability

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

熊猫:修改特定级别的Multiindex

我有一个带有Multiindex的数据框,并希望修改Multiindex的一个特定级别.例如,第一级可能是字符串,我可能想要从该索引级别删除空格:

df.index.levels[1] = [x.replace(' ', '') for x in df.index.levels[1]]
Run Code Online (Sandbox Code Playgroud)

但是,上面的代码会导致错误:

TypeError: 'FrozenList' does not support mutable operations.
Run Code Online (Sandbox Code Playgroud)

我知道我可以reset_index并修改列然后重新创建Multiindex,但我想知道是否有更优雅的方法来直接修改Multiindex的某个特定级别.

python immutability multi-index pandas

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

实例化不可变配对对象

是否可以创建一个具有对合作伙伴对象的不可变引用的类,或者它是否必须是var我在创建后分配的类?

例如

class PairedObject (p: PairedObject, id: String) {
  val partner: PairedObject = p  // but I need ref to this object to create p!
}
Run Code Online (Sandbox Code Playgroud)

或类似地,我如何实例化以下对?

class Chicken (e: Egg) { 
  val offspring = e
}

class Egg (c: Chicken) {
  val mother = c
}
Run Code Online (Sandbox Code Playgroud)

scala object immutability

26
推荐指数
1
解决办法
1963
查看次数

Javascript:长度方法有效吗?

我正在做一些javascript编码,我想知道长度方法是"预先计算",还是由JS引擎记住.

所以,问题是:

如果我经常检查数组长度,并假设我没有更改它(通过闭包使其不可变),我应该预先计算长度方法并将其存储在某个变量中吗?

谢谢!

javascript arrays immutability

26
推荐指数
3
解决办法
8340
查看次数

高度可变域中的不可变功能对象

我正在利用Scala在业余时间学习函数式编程,我有一个闲置的新手问题.

在做像Haar小波变换这样的事情时,我可以看到具有不可变对象的优雅 - 即当数据本身由对象表示时不会改变.

但我看到一个博客,其中有人以小游戏为例证明了不变性.如果一个生物对象收到了伤害,它没有改变它的状态 - 它返回了一个新的生物对象,其中包含新的生命值和一个新的"aggro to X"标志.但是,如果我们设计像MMORPG这样的东西,魔兽世界说.战场上的一百名玩家......可能有成千上万的攻击和缓冲/减益效果以不同的方式影响他们.是否仍然可以使用完全不可变的对象来设计系统?对我来说,似乎每个'滴答'会有一大群新的实例.为了获得当前有效的对象实例,所有客户端都会不断地经历某种中心"游戏世界"对象,或者?

函数式编程是否适用于此,或者这是"最佳工作的最佳工具,可能在这里不可变"的情况?

functional-programming immutability

25
推荐指数
2
解决办法
2184
查看次数

C#中的字符串不变性

我很好奇StringBuilder类是如何在内部实现的,因此我决定查看Mono的源代码并将其与Reflector的反汇编代码进行比较.从本质上讲,Microsoft的实现用于char[]在内部存储字符串表示,以及一些不安全的方法来操作它.这很简单,没有提出任何问题.但当我发现Mono在StringBuilder中使用一个字符串时,我很困惑:

private int _length;
private string _str;
Run Code Online (Sandbox Code Playgroud)

第一个想法是:"多么无谓的StringBuilder".但后来我发现可以使用指针改变字符串:

public StringBuilder Append (string value) 
{
     // ...
     String.CharCopy (_str, _length, value, 0, value.Length);
}

internal static unsafe void CharCopy (char *dest, char *src, int count) 
{
    // ...
    ((short*)dest) [0] = ((short*)src) [0]; dest++; src++;
}    
Run Code Online (Sandbox Code Playgroud)

我曾经在C/C++中编程一点,所以我不能说这段代码让我很困惑,但我认为字符串是完全不可变的(即绝对没有办法改变它).所以实际的问题是:

  • 我可以创建一个完全不可变的类型吗?
  • 除性能问题外,是否有任何理由使用此类代码?(更改不可变类型的不安全代码)
  • 字符串本质上是线程安全的吗?

.net c# pointers immutability

25
推荐指数
1
解决办法
2496
查看次数

我可以更改传递给我的方法的String对象的值吗?

我发现以下问题是Java"pass-by-reference"还是"pass-by-value"?.

我几乎阅读了所有内容,但是如果我想要这个foo(-)方法,我还不知道该怎么做才能改变我String价值?(也许或不参考,对我来说无关紧要).

void foo(String errorText){ 
    errorText="bla bla";
}

int main(){ 
    String error="initial"; 
    foo(error); 
    System.out.println(error);
}
Run Code Online (Sandbox Code Playgroud)

我想bla bla在控制台上看到.可能吗?

java string parameters immutability pass-by-reference

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

番石榴中是否有相应的不可变enumMap?

我最近了解了EnumMap在Java中的优点,并希望将现有的替换ImmutableMap<OccupancyType, BigDecimal>为EnumMap.但是,我也喜欢ImmutableMap提供的不可变属性.

  • 在番石榴中是否有一个变体,ImmutableEnumMap?
  • 在存储方面哪一个(EnumMap与ImmutableMap)表现更好?
  • 我找不到两者的比较.如果有人能指出我的链接或者对两种数据结构的效率有一些见解,我会很感激吗?

java immutability enum-map guava

25
推荐指数
2
解决办法
1万
查看次数

如何从一个范围创建一个Vec并将其洗牌?

我有以下代码:

extern crate rand;

use rand::{thread_rng, Rng};

fn main() {
    let mut vec: Vec<u32> = (0..10).collect();
    let mut slice: &[u32] = vec.as_mut_slice();

    thread_rng().shuffle(slice);
}
Run Code Online (Sandbox Code Playgroud)

并得到以下错误:

error[E0308]: mismatched types
 --> src/main.rs:9:26
  |
9 |     thread_rng().shuffle(slice);
  |                          ^^^^^ types differ in mutability
  |
  = note: expected type `&mut [_]`
             found type `&[u32]`
Run Code Online (Sandbox Code Playgroud)

我想我明白向量和切片的内容是不可变的,这会导致错误,但我不确定.

签名as_mut_slicepub fn as_mut_slice<'a>(&'a mut self) -> &'a mut [T],所以切片应该是可变的,但它不知何故.

我知道必须有一个简单的解决办法,但我尽我所能,无法让它发挥作用.

iterator immutability mutability rust

25
推荐指数
2
解决办法
1万
查看次数