gpt4 book ai didi

struct - 如何从结构中获取 fmt::Display 并将其显示在另一个结构的 fmt::Display 中?

转载 作者:行者123 更新时间:2023-12-02 18:12:37 29 4
gpt4 key购买 nike

我不确定如何命名这个问题,因为我是 Rust 新手,所以请随意提出修改建议。

我有两个结构。一个是 Job 结构,其中包含一些数字,例如作业需要多长时间等。另一个是 JobSequence,其中包含 JobVec()

我为 Job 实现了 fmt::Display 特征,以便它以这种方式打印出三个数字:

(10, 12, 43)

现在,我想为 JobSequence 结构实现 fmt::Display 特征,以便它迭代结构体中的每个 Job矢量并以这种方式显示它们:

(0, 10, 5)
(30, 10, 5)
(0, 10, 5)
(0, 10, 5)
(0, 10, 5)

我认为(?)我应该重用Job结构的实现特征并使用它,以便它在某种程度上简单地将它们打印为半列表。这是我目前的实现,但我有一种感觉很草率,有更好的方法:

pub struct JobSequence {
pub job_sequence: Vec<Job>,
}

impl fmt::Display for JobSequence {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let mut final_output = String::new();
for i in &self.job_sequence {
final_output.push_str(i.to_string().as_str());
final_output.push_str("\n");
}
write!(f, "{}", final_output)
}
}

最佳答案

您可以通过使用 {} 格式字符串将 Display 直接传递给 write! 来重复使用 Display impl:

impl fmt::Display for JobSequence {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
for i in &self.job_sequence {
writeln!(f, "{}", i)?;
}
Ok(())
}
}

您可以在the docs中阅读有关格式化宏使用的不同特征的更多信息。 。 (普通 {} 使用 std::fmt::Display。)

关于struct - 如何从结构中获取 fmt::Display 并将其显示在另一个结构的 fmt::Display 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72071616/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com