56得票2回答
在Rust中如何将Vec<String>转换为&str切片?

根据Steve Klabnik在Rust 1.0文档之前的写作中关于String和&amp;str之间区别的文章, 在Rust中,除非你真正需要拥有一个String,否则应该使用&amp;str。同样地,建议使用对切片(&amp;[])的引用而不是Vec,除非你真正需要拥有Vec。 我有一个...

35得票3回答
在Rust中实现类似图的数据结构

我有一个数据结构,可以表示为一些结构体之间的单向图,这些结构体通过链接对象相互连接,因为链接包含元数据。 它看起来像这样: struct StateMachine { resources: Vec&lt;Resource&gt;, links: Vec&lt;Link&gt...

20得票7回答
如何正确地公开类拥有的资源?

假设我有一个库,其中包含一个Document类。 Document的实例可以拥有多个Field的实例。 Field具有多个子类(例如IntegerField和StringField),甚至API用户也可以将其子类化并向Document提供子类实例(假设允许用户开发一种自定义数据类型以存储在字段...

14得票1回答
为什么在 Rust 的 `Cell<T>` 中,`set` 方法明确丢弃旧值?

为什么在Cell上定义的set方法,在最后一行明确地删除了old值?难道函数返回时不会自动释放内存吗? use std::mem; use std::cell::UnsafeCell; pub struct Cell&lt;T&gt; { value: UnsafeCell&lt;...

7得票4回答
如何在不丢失对象的情况下解构它?

我有一个结构体需要按值传递、改变然后返回。我还想改变它的泛型类型,因为我使用这个状态来静态地确保函数调用的正确顺序,以实现安全的 FFI。 (示例:playground) use core::marker::PhantomData; struct State1 {} struct Stat...

9得票2回答
按值重载运算符会导致使用已移动的值。

编译以下使用运算符重载的 Rust 代码: use std::ops::{Add}; #[derive(Show)] struct Point { x: int, y: int } impl Add for Point { type Output = Point;...

7得票1回答
docker ADD --chown 是一个错误还是特性?

我在使用 --chown 标志将文件添加到映像并设置所有权时遇到了问题。具体来说,以下是添加简单文本文件的 Dockerfile: FROM fedora:24 ARG user_name=slave ARG user_uid=1000 ARG user_home=/home/$user_...

8得票1回答
如何强制Rust接管由其安全方法之外分配的内存?

在他2018年2月的名为“Rust中的内存安全:C语言案例研究”的笔记中,Will Crichton写道: Rust提供了获取原始指针所有权的能力,我们使用slice::from_raw_parts_mut和Box::from_raw来告诉Rust将内存指针视为堆分配的数组。在转移所有权后,...

8得票2回答
对于所有权,使用unique_ptr,否则使用原始指针?

我正在使用C++11编写一些代码。我有 class X { /* */ }; class A { std::vector&lt;X*&gt; va_x; }; class B { std::vector&lt;X*&gt; vb_x; std::vector&lt...

32得票1回答
如何在结构体中正确存储不可变路径?

以下代码能够工作,但不确定是否正确。有几个问题: 我应该使用 Path 还是 PathBuf? 我应该使用 AsRef 吗? 我需要使用 PathBuf::from(path) 使路径被结构体拥有吗? 我应该使用 Path 还是 PathBuf? 我应该使用 AsRef 吗? 我...