我有这样的结构
#[derive(Copy, Clone)]
enum Command {
Quit,
Error { msg: String },
}
Run Code Online (Sandbox Code Playgroud)
编译器抱怨它无法为其生成复制构造函数Error.
我需要使struct可复制以将通道传递给另一个线程.
error: the trait `Copy` may not be implemented for this type; variant `Error` does not implement `Copy` [E0205]
#[derive(Copy, Clone)]
^~~~~~~~~~~~~~~~~~~~~~
note: in this expansion of #[derive_Copy] (defined in src/main.rs)
Run Code Online (Sandbox Code Playgroud)
它编译如果msg是i32.看起来很奇怪,这种基本类型String是不可复制的.
我搜索了这些条款,但我仍然感到困惑.
有些人说成员副本是深拷贝,而按位副本是影子副本,但有人说它不是.
任何人都可以向我解释默认复制构造函数和用户定义的复制构造函数使用哪种类型的副本?
我最近读到的一篇文章指出,将 a 保存为字段的结构Box<T>不是Copy.
这让我很困惑,因为我认为任何大小已知的类型都可以存储在堆栈上 - 因此是Copy.
的大小不是Box总是一样吗?我认为它只是对堆分配内存的引用 - 因此总是具有相同的大小。
“该str类型也称为‘字符串切片’,是最原始的[强调]字符串类型。” (https://doc.rust-lang.org/std/primitive.str.html)
因此,直观上str应该是可复制的,它是:
fn main() {
let _str = "hello";
let _str2 = _str;
println!("{}", _str); // Output: hello
}
Run Code Online (Sandbox Code Playgroud)
但是,它没有实现以下Copy特征:
fn main() {
is_copy::<str>(); // Compile time error: the trait std::marker::Copy is not implemented for str
}
fn is_copy<T: Copy>() {}
Run Code Online (Sandbox Code Playgroud)
是什么允许这种类似复制的行为str?
我正在用 Rust 构建一个简单的命令行待办事项应用程序。如果我不实现复制特征,我会得到这个错误:“移动发生是因为 'todo' 的类型是 'todo::Todo',它没有实现 'Copy' 特征”。当我尝试为我的 Todo 结构实现 Copy 特征时,我收到以下错误:“字段文本:字符串未实现 Copy 特征”。我该如何解决这个错误?我的代码如下:
pub type todo_type = Vec<Todo>;
#[derive(Copy)]
pub struct Todo {
id: usize,
text: String,
completed: bool,
}
impl Todo {
pub fn new(text: String, id: usize) -> Todo {
Todo {
text,
id,
completed: false,
}
}
}
pub struct Todos {
todos: todo_type,
}
impl Todos {
pub fn new(todos: todo_type) -> Todos {
Todos { todos }
}
pub fn get_all_todos(self) -> todo_type { …Run Code Online (Sandbox Code Playgroud) 我想要一个 BigDecimal 值的数组,因为我提前知道大小并且它是常量。
然而我不知道如何在 Rust 中初始化它。这个方法:
#[derive(Debug)]
struct BigArray { values: [BigDecimal; 52] }
fn main() {
let mut v = BigArray { values: [BigDecimal::from_str("0"); 52] };
println!("{:?}", v);
}
Run Code Online (Sandbox Code Playgroud)
产生以下错误:
该特征
Copy未实现BigDecimal注意:该
Copy特征是必需的,因为重复的元素将被复制
我确实希望在数组中克隆默认的 BigDecimal 值。
难道不可能吗?Vec 是唯一的选择吗?
我可以将它变成借用值,但它不再是 BigDecimal 数组,并且生命周期管理和悬空指针变得非常棘手。
这是我的结构:
#[derive(Copy, Clone)]
pub struct ArimaModel {
p: u8,
d: u8,
q: u8,
holdout_length: u16,
max_ar_lag: u8,
max_ma_lag: u8,
df_lags: u8,
time_series: Vec<f64>,
ar_lags: Vec<usize>,
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试将我的结构传递给多个函数。
这是我的错误:
#[derive(Copy, Clone)]
pub struct ArimaModel {
p: u8,
d: u8,
q: u8,
holdout_length: u16,
max_ar_lag: u8,
max_ma_lag: u8,
df_lags: u8,
time_series: Vec<f64>,
ar_lags: Vec<usize>,
}
Run Code Online (Sandbox Code Playgroud)