我正在尝试从结构的字段导出一个值,该字段是一个枚举,以避免输入错误,它会抛出一个错误,我无法返回它,而且我真的不知道我能做什么。
我无法移出self.package发生共享引用移动的后面,因为self.package具有 type issues::PackageManager,它没有实现该Copy特征。
pub enum PackageManager {
NPM,
PNPM,
YARN,
}
pub struct ProjectStruct {
name: String,
description: String,
version: u8,
package: PackageManager,
}
pub trait Project {
fn new(name: String, description: String) -> Self;
fn set_version(&mut self, version: u8);
fn get_version(&self) -> u8;
fn set_name(&mut self, name: String);
fn get_name(&self) -> String;
fn set_package_manager(&mut self, package_manager: PackageManager);
fn get_package_manager(&self) -> PackageManager;
}
impl Project for ProjectStruct {
fn new(name: String, description: String) -> Self {
ProjectStruct {
name,
description,
version: 1,
package: PackageManager::PNPM,
}
}
fn set_version(&mut self, version: u8) {
self.version = version
}
fn get_version(&self) -> u8 {
self.version
}
fn set_name(&mut self, name: String) {
self.name = name
}
fn get_name(&self) -> String {
self.name.clone()
}
fn set_package_manager(&mut self, package_manager: PackageManager) {
self.package = package_manager
}
fn get_package_manager(&self) -> PackageManager {
/* * no error
match self.package {
PackageManager::NPM => PackageManager::NPM,
PackageManager::PNPM => PackageManager::PNPM,
PackageManager::YARN => PackageManager::YARN,
}*/
// error
self.package
/* *cannot move out of `self.package` which is behind a shared reference
move occurs because `self.package` has type `issues::PackageManager`, which does not implement the `Copy` traitrustc */
}
}
Run Code Online (Sandbox Code Playgroud)
我试图返回不带开关的字段值,因为它可以包含多个选项。
错误“未实现该Copy特征”为您指明了正确的方向。您需要做的就是实现Copy该类型,这可以通过简单的派生来完成。
#[derive(Clone, Copy)] // Copy requires Clone
pub enum PackageManager {
NPM,
PNPM,
YARN,
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |