标签: mutable

为什么我得到“不能一次多次借用 `arr[_]` 作为可变对象”?

我有一个使用 Rust 创建冒泡排序的编程作业。我在 Rust 方面确实没有太多经验,所以这对我来说有点困难:

fn main() {
    println!("Sort numbers ascending");
    let num:[i32; 10] = [4, 65, 2, -31, 0, 99, 2, 83, 782, 1];
    println!("Before: {:?}", num);
    bubble_sort( num);
    println!("After: {:?}\n", num);
}

fn swap( a: &mut i32, b: &mut i32){
    let tmp: i32 = *b;
    *b=*a;
    *a=tmp;
}

fn bubble_sort(mut arr: [i32; 10]) {
    for i in 0..arr.len() {
        for j in 0..arr.len() - 1 - i {
            if arr[j] > arr[j + 1] {
                swap( &mut arr[j], …
Run Code Online (Sandbox Code Playgroud)

swap mutable rust borrow

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

如何获取对数组子集的有效可变引用?

这符合阅读的预期:

fn u64_from_low_eight(buf: &[u8; 9]) -> u64 {
    let bytes: &[u8; size_of::<u64>()] = buf[..size_of::<u64>()].try_into().unwrap();
    u64::from_le_bytes(*bytes)
}
Run Code Online (Sandbox Code Playgroud)

(它很好地优化为 AArch64 和 x86_64 上的单个汇编指令。)

我原本期望类似的方法可以将 u64 未对齐写入缓冲区。

/// Encodes a u64 into 1-9 bytes and returns the number of bytes updated.
pub fn encode(value: u64, buf: &mut [u8; 9]) -> usize {
    let low64: &mut [u8; size_of::<u64>()] = &mut buf[..(size_of::<u64>())].try_into().unwrap();

    match value {
        // FIXME: Change to exclusive ranges once the feature's stabilised.
        OFFSET0..=OFFSET1_LESS_ONE => {
            let num = inner_encode::<1>(value, low64);
            #[cfg(test)] eprintln!("low64: …
Run Code Online (Sandbox Code Playgroud)

arrays optimization reference mutable rust

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

基本的F#问题:可变性,资本化标准,功能与方法

如果已经有人问过,请随时给我指出其他答案!

我本月刚刚发布新版本的F#.我有OO和函数语言的一些背景知识(Haskell和Scheme,但不是OCaml/ML).到目前为止,已经出现了几个问题,而不是阅读F#CTP附带的小教程.

1)可变变量优于monad吗?如果是这样,那么在F#中完全避开monad吗?

2)我对使用的大小写感到困惑.在本教程代码文件中,有时函数以小写字母开头,有时以大写字母开头.我知道MS倾向于喜欢带有函数和方法的初始大写,但在这里似乎有两种方法可以做到这一点.这对我来说并不是什么大不了的事,因为我只是在自己的时间玩耍,但我很好奇标准是什么.

3)我对OO和功能样式的整体组合感到非常困惑.print_string "string"有道理,但接下来就是List.map fn list(除非List只是命名空间,如果是这样,请原谅我).然后是str.Length.任何人都在关心何时使用什么,哪个更受欢迎?

谢谢!

oop f# functional-programming naming-conventions mutable

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

附加到列表实例的对象显示在该列表的不同实例中

我正在编写这段代码作为面向对象编程的练习.

在这里,我试图将房屋定义为房间列表,并将每个房间定义为设备列表(例如灯具).

首先,我创建了所有对象,并将两个房间附加到房屋,并为每个房间添加了不同的设备.很基本的.

问题是,似乎设备被附加到两个房间.这是为什么?

代码:

#! /usr/bin/python

class House:
        def __init__(self, rooms = list()):
                self.rooms = rooms
                print('house created')


class Room:
        def __init__(self, name = 'a room', devs = list()):
            self.name = name
            self.devs = devs
            print('room ' + self.name + ' created')


class Device:
        def __init__(self, name = 'a device'):
                self.name = name
                print('device ' + self.name + ' created')


def main():
        #1
        h = House()
        r1 = Room(name = 'R1')
        r2 = Room(name = 'R2')
        d1 = Device(name …
Run Code Online (Sandbox Code Playgroud)

python arguments default mutable

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

scala list操作:这个scala好吗?

我在scala中编写了一些代码来解析相对(文件)路径,请参阅下面的代码.我将路径存储为字符串列表,当我计算相对路径时,我使用一个可变列表变量,其中我存储了我工作的列表的修改副本.

我有一种直觉,认为这可能不是最好的方式,或者是这样吗?我应该使用可变列表并操纵它吗?或者我应该只使用不可变列表,根本没有变量和功能版本?该方法应如何写成"亲戚"?

class PathInfo(e: List[String]) {

    val elements=e;

    def relative(s : String) :PathInfo= relative(PathInfo.fromString(s));

    def relative(that : PathInfo) : PathInfo = {
        var list : List[String]=List();
        for (item <- elements) {
            list = list :+ item;
        }
        for (item <- that.elements) {
            item match {
                case "." => ;
                case ".." => list = list dropRight(1);
                case other => list = list :+ other;
            }
        }
        new PathInfo(list);
    }

    override def toString : String = {
        elements.mkString("/");
    }

}

object …
Run Code Online (Sandbox Code Playgroud)

scala mutable immutability

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

在.net 2.0中是否有任何预定义的类来保存单个泛型类型的可变字段?

在我的一些项目中,我发现自己宣布了一个相当无聊的课程:

    Class Holder(Of T)
        Public It As T
        Sub New(ByVal It As T)
            Me.It = It
        End Sub
    End Class

例如,允许对象以这样的方式向另一个对象提供信息,使得信息可以随后在任何地方发生变化.例如,在一个词典(串,持有人(中SomeImmutableType)),所以可以更新SomeImmutableType的事情,而不必改变词典本身(因为字典对一个给定的关键条目总是包含相同的Holder对象,即持有人对象可以用作锁).

是否有更适合此目的的内置类?我更喜欢.net 2.0兼容性,但即使在4.0中,Tuple类型也是不可变的.如果没有这样建于一件事,就是它需要一个持有人类型来定义它本身作为一个嵌套的类型,或者要求有一个项目中持有人一个定义每种类型的更好吗?

我所知道的唯一内置的东西是Array.使用一个元素的数组是可行的,但它感觉真的很吵,因为通常当代码有一个数组时,期望它可以使用某个大小而不是一个.

PS -用例:

  1. 要计算每个不同字符串在列表中出现的次数,可以创建一个Dictionary(Of String,Holder(Of Integer)),然后对于每个字符串,执行TryGetValue以检索持有者(如果已存在).如果不存在,则创建一个新的持有者并将其存储在字典中.然后在任何一种情况下增加存储在持有者中的值.请注意,以这种方式执行操作将需要最少数量的字典写入.
  2. 如果一个人的不可改变的事情字典,一个希望改变与键关联的旧值的推导值(例如它的"字符串,字符串"的字典和一个希望有效地执行"MyDict(的myKey) = myDict(key)&someThing"),通过编写字典来执行这样的操作将需要锁定整个字典,而一个字符串附加.如果操作像字符串追加一样简单,可能也不会太糟糕,但如果操作更复杂则可能很糟糕.使用"Holder",只需要在获取密钥时锁定Dictionary; 然后可以释放Dictionary锁并锁定Holder,允许其他线程使用Dictionary.
  3. 在生成闭包时,编译器可以使用Holder类来避免委托保留它们不会使用的活动字段.如果范围包含ExpensiveObject"富"和整数"酒吧",它包含一个短暂的关闭,需要两个"富"和"酒吧",和长寿命的一个只需要"酒吧",编译器可以定义两个闭包的单独闭包类型,并且它们都包含对同一个Holder(Of Bar)的引用.这将允许保持闭包语义,而不必保留任何额外的对象.

.net vb.net mutable

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

python中的不可变对象

我看到一篇关于不可变对象的文章.

它表示何时:
variable = immutable
将不可变赋值给变量.

例如
a = b # b is a immutable
它在这种情况下a指的是a copy of b,而不是reference to b.如果是mutable,那么a就是a reference to b

所以:

a = 10
b = a
a =20
print (b) #b still is 10
Run Code Online (Sandbox Code Playgroud)

但在这种情况下:

a = 10
b = 10
a is b # return True
print id(10)
print id(a)
print id(b) # id(a) == id(b) == id(10)
Run Code Online (Sandbox Code Playgroud)

if a是副本10, …

python mutable immutability variable-assignment

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

如何将索引转换为可变数组到Haskell中的状态引用?

我正在重新编写游戏,我问了一个问题," 我如何迭代四重链接的二维数据网格,好像它是一个二维数组? ",适用于Haskell.

为了首先创建数据网格,我使用了一种非常命令式的算法,如下所示.它依赖的关键特性是我可以将索引转换为数组并从中创建引用.例如,"&array [x] [y]".

我需要能够将索引转换为可变数组,并在Haskell中从中生成状态引用.因此类型签名可能是

convertToSTRef :: i -> STArray s i a -> ST s (STRef s a)
Run Code Online (Sandbox Code Playgroud)

我查看了文档,尝试过hoogle和hayoo,但没有找到完成此任务的方法.

PS或者,如果某人有我可以使用的不同算法,那就太棒了.

PSS简单的命令式算法.

const size_t rows = 20;
const size_t columns = 59;

block tiles[columns][rows];
block * const start = &tiles[columns/2][rows/2];

for (size_t x = 0; x < columns; ++x)
 for (size_t y = 0; y < rows; ++y)
 {
  tiles[x][y].floor = '^';
  tiles[x][y].inhabitant = WALL;
  tiles[x][y].side_block[EAST] = (x + 1 < columns) ? &tiles[x + 1][y] : NULL; …
Run Code Online (Sandbox Code Playgroud)

arrays state haskell functional-programming mutable

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

我无法将OCaml中的Array与修改区分开来

是完整的代码.我会尝试展示一些作品.我正在写一个通过telnet工作的tic tac toe服务器.这是游戏板的代表

let empty_board = [|
                [|EMPTY; EMPTY; EMPTY|];
                [|EMPTY; EMPTY; EMPTY|];
                [|EMPTY; EMPTY; EMPTY|]|]
Run Code Online (Sandbox Code Playgroud)

它仅用于Array.copy在游戏循环中传递玩家描述符和新棋盘:

let prepare_game_process pair_of_players= 
 pair_of_players >>= fun (player1, player2) ->  
 send_to_client player1 "You play for X";
 send_to_client player2 "You play for O";
 let new_board = Array.copy empty_board in
 game_loop player1 player2 new_board
Run Code Online (Sandbox Code Playgroud)

但是每次新游戏开始时,game_loop中的所有更改都会反映到原始的empty_board:

let make_move x y board token=
 board.(y).(x) <- token;
 board
Run Code Online (Sandbox Code Playgroud)

我看了十亿次代码,但我根本看不出原因.

arrays ocaml mutable

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

为什么这个函数会改变数据?

function bubbleSort(toSort) {
  let sort = toSort;
  let swapped = true;
  while(swapped) {
    swapped = false;
    for(let i = 0; i < sort.length; i++) {
      if(sort[i-1] > sort[i]) {
        let temp = sort[i-1];
        sort[i-1] = sort[i];
        sort[i] = temp;
        swapped = true;
      }
    }
  }
  return sort;
}

let asdf = [1,4,3,2];
let asd = bubbleSort(asdf);

console.log(asdf, asd);
Run Code Online (Sandbox Code Playgroud)

此代码的输出为:[1,2,3,4] [1,2,3,4].

我期待的是:[1,4,3,2] [1,2,3,4].

我想知道的是,为什么这会改变asdf变量?bubbleSort函数接受给定的数组(asdf),复制它(排序),然后处理该变量并返回它,asd设置为等于.我觉得自己像个白痴,但我不知道为什么会这样:(

javascript mutable immutability

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