Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust链表不能借用上一个和下一个元素作为可变元素(只需要不可变的引用)_Rust_Borrow Checker_Borrowing_Borrow_Mutable Reference - Fatal编程技术网

Rust链表不能借用上一个和下一个元素作为可变元素(只需要不可变的引用)

Rust链表不能借用上一个和下一个元素作为可变元素(只需要不可变的引用),rust,borrow-checker,borrowing,borrow,mutable-reference,Rust,Borrow Checker,Borrowing,Borrow,Mutable Reference,目前,我正在开发一个模拟(多链)摆的小应用程序。 为了保存它们,我决定使用std::collections::LinkedList 显示它们并静态移动它们不是问题,但是为了计算实际的运动,我需要知道父摆和子摆的一些值 我真的不需要对它们的可变引用,但是链表API不允许我使用不可变的引用。但我想这不会改变编译器的想法,因为它仍然是一个可变的和一些不可变的借用 我的代码如下所示: 让mut cursor=/*一些包含0个或更多元素的链表*/.cursor\u front\u mut(); //第一个

目前,我正在开发一个模拟(多链)摆的小应用程序。 为了保存它们,我决定使用std::collections::LinkedList

显示它们并静态移动它们不是问题,但是为了计算实际的运动,我需要知道父摆和子摆的一些值

我真的不需要对它们的可变引用,但是链表API不允许我使用不可变的引用。但我想这不会改变编译器的想法,因为它仍然是一个可变的和一些不可变的借用

我的代码如下所示:

让mut cursor=/*一些包含0个或更多元素的链表*/.cursor\u front\u mut();
//第一个元素获得一个幻影父元素,它对计算没有影响
让mut first=摆锤::零_中心();
//与最后一个元素相同。但我们还不知道这个幽灵的位置。
让我们坚持下去;
而让Some(current)=cursor.current(){/&mut优先
};
让child=match cursor.peek_next(){//第三个可变借用发生在这里
一些(孩子)=>孩子,
无=>{

last=be摆::zero(current.bottom_pos);//通常,可变引用要求以独占方式访问它们指向的对象,不安全的块对此没有影响。原始指针没有此要求,因此编写违反这些要求的代码必须使用原始指针

实施带有不安全锈迹的链表将超出SO答案的范围,但我建议将其作为一种资源,介绍如何实现这一点


有时,在向量中使用索引构建链表是一种很好的替代方法,它会避开Rust对其引用提出的许多要求上的任何问题。

可变别名总是非法的,即使是
不安全的
,但不会导致任何错误。
peek_prev()
peek_next()
不要可变借用
光标
父项
子项
也是不可变的引用。@springworks00感谢您对不安全和可变借用的提示!不幸的是,我看不到您发送的代码。我只是得到了一个hello world函数。我很抱歉,可能会尝试对响应太晚表示歉意。我现在可以看到您的代码了很遗憾,我仍然不可能对当前元素()进行变异。但是我想我会按照@alice ryhl的建议将指针转换为向量。仍然感谢您的帮助!