Enums 有没有办法在枚举变量之间共享可变状态?
我目前在我的Rust代码中使用枚举,并为它们实现了显示特性。但是,每当我在此枚举上调用_string(),我都希望Display trait中的fmt函数访问所有枚举变量都可以看到的共享字符串。一旦我有了那个字符串,我就会将它写入一个文件。目前,我只是打开一个文件,并为每个to_字符串调用写入它。以下是我所拥有的:Enums 有没有办法在枚举变量之间共享可变状态?,enums,rust,mutable,Enums,Rust,Mutable,我目前在我的Rust代码中使用枚举,并为它们实现了显示特性。但是,每当我在此枚举上调用_string(),我都希望Display trait中的fmt函数访问所有枚举变量都可以看到的共享字符串。一旦我有了那个字符串,我就会将它写入一个文件。目前,我只是打开一个文件,并为每个to_字符串调用写入它。以下是我所拥有的: use std::fmt; use std::fs; pub enum Ast { A, B, C, } impl fmt::Display for As
use std::fmt;
use std::fs;
pub enum Ast {
A,
B,
C,
}
impl fmt::Display for Ast {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Ast::A => {
foo();
write!(f, " ... ")
}
Ast::B => {
foo();
write!(f, "...")
}
Ast::C => {
foo();
write!(f, "...")
}
}
}
}
fn foo() {
let data: String = String::from("This is data");
fs::write("src/file.txt", data).expect("Could not open file");
}
相反,我想在文件顶部声明一个字符串变量,foo可以访问和修改该变量。有没有办法做到这一点?谢谢在
显示器中写入文件
impl似乎非常错误。这对任何使用您的代码的人来说都是意外的,并且可能会导致问题。它可能表示您从错误的角度处理某个问题,或者试图解决错误的问题。不可能在&self
接收器内改变状态,您最好选择使用某种同步策略的静态变量。@Caio:实际上,使用单元格是可能的。这也是出乎意料的,所以有一个很好的理由。在Display
impl中写入文件似乎是非常错误的。这对任何使用您的代码的人来说都是意外的,并且可能会导致问题。它可能表示您从错误的角度处理某个问题,或者试图解决错误的问题。不可能在&self
接收器内改变状态,您最好选择使用某种同步策略的静态变量。@Caio:实际上,使用单元格是可能的。这也是出乎意料的,所以有一个很好的理由。