我想编写一个函数来生成一些文本,就像这样:
fn produce_stuff(/* ??? */) -> Result<()> {
write!(...);
write!(...);
write!(...);
...
}
我希望能够在两个上下文中使用这个函数:
- 将其用于输出到IO writer - 类似于
produce_text(io.stdout())
。 - 将其用作实现
Display
的辅助函数 - 类似于以下内容:
struct Foo { ... }
impl Display for Foo {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
...
produce_text(f);
...
}
}
似乎每个用例都需要 produce_text
的不同签名。对于 #1,函数需要接受实现了 std::io::Write
的内容,而对于 #2,则需要接受一个 std::fmt::Formatter
。
我想我可以将其编写为宏而不是函数(类似于 write!
是在两种上下文中均可使用的宏),但某种程度上感觉使用宏有些不妥。