Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Enums 有没有办法在枚举变量之间共享可变状态?_Enums_Rust_Mutable - Fatal编程技术网

Enums 有没有办法在枚举变量之间共享可变状态?

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

我目前在我的Rust代码中使用枚举,并为它们实现了显示特性。但是,每当我在此枚举上调用_string(),我都希望Display trait中的fmt函数访问所有枚举变量都可以看到的共享字符串。一旦我有了那个字符串,我就会将它写入一个文件。目前,我只是打开一个文件,并为每个to_字符串调用写入它。以下是我所拥有的:

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:实际上,使用单元格是可能的。这也是出乎意料的,所以有一个很好的理由。