[英]How to create Struct methods and use them in Rust
我对 Rust 编程语言比较陌生。 我正在学习结构和枚举。 我创建了一个程序来存储星期几并查看是否是周末作为测试程序。 代码如下:
#[derive(Debug)]
enum DaysOfTheWeekNames {
Friday,
Saturday,
Sunday,
}
#[derive(Debug)]
struct Weekday {
day: DaysOfTheWeekNames,
weekend: bool,
}
impl Weekday {
fn isWeekend(day: DaysOfTheWeekNames) -> bool {
match day {
DaysOfTheWeekNames::Saturday => false,
DaysOfTheWeekNames::Sunday => false,
other => true,
}
}
fn new_day(day: DaysOfTheWeekNames) -> Self {
Self { day, weekend: Weekday::isWeekend(day) }
}
}
fn main() {
let today = Weekday::new_day(DaysOfTheWeekNames::Saturday);
println!("Today: {:#?}", today);
}
所以我的目标是创建一个名为 Weekday 的结构,并希望使用名为 new_day() 的方法对其进行初始化,我只将工作日的名称传递给该方法。 这个 function 应该调用 isWeekend() 方法来查找是否是周末。 但是上面的代码如预期的那样抛出错误,因为变量name
的所有权被移到了 isWeekend function 而没有传回。 那么编写这样一个用例的理想方式是什么,我们应该如何解决这个问题呢?
我看到的错误如下:
error[E0382]: use of moved value: `day`
--> src/main.rs:115:50
|
114 | fn new(day: DaysOfTheWeek) -> Self {
| --- move occurs because `day` has type `DaysOfTheWeek`, which does not implement the `Copy` trait
115 | Self { day, weekend: Weekday::is_weekend(day) }
| --- value moved here ^^^ value used here after move
解决了这个问题。 说明:由于 isWeekend 是一个结构方法,我们不应该传递我们在上面所做的实例的结构字段(即天)。 要解决这个问题,我们必须复制或克隆 day 参数,然后将其传递给 isWeekend() function。
代码:
#[derive(Debug)]
#[derive(Clone, Copy)]
enum DaysOfTheWeekNames {
Friday,
Saturday,
Sunday,
}
#[derive(Debug)]
struct Weekday {
day: DaysOfTheWeekNames,
weekend: bool,
}
impl Weekday {
fn is_weekend(day: DaysOfTheWeekNames) -> bool {
match day {
DaysOfTheWeekNames::Saturday => true,
DaysOfTheWeekNames::Sunday => true,
_ => false,
}
}
fn new_day(day: DaysOfTheWeekNames) -> Self {
Self { day, weekend: Weekday::is_weekend(day.clone()) }
}
}
fn main() {
let today = Weekday::new_day(DaysOfTheWeekNames::Saturday);
println!("Today: {:#?}", today);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.