Macro std::write 1.0.0[−][src]
macro_rules! write { ($dst:expr, $($arg:tt)*) => { ... }; }
Expand description
将格式化的数据写入缓冲区。
该宏接受 ‘writer’,格式字符串和参数列表。
参数将根据指定的格式字符串进行格式化,并将结果传递到 writer。
使用 write_fmt
方法时,writer 可以是任何值; 通常,这来自 fmt::Write
或 io::Write
trait 的实现。
宏返回 write_fmt
方法返回的任何内容; 通常是 fmt::Result
或 io::Result
。
有关格式字符串语法的更多信息,请参见 std::fmt
。
Examples
use std::io::Write; fn main() -> std::io::Result<()> { let mut w = Vec::new(); write!(&mut w, "test")?; write!(&mut w, "formatted {}", "arguments")?; assert_eq!(w, b"testformatted arguments"); Ok(()) }Run
模块可以同时在实现两者的对象上导入 std::fmt::Write
和 std::io::Write
以及调用 write!
,因为对象通常不会同时实现两者。
但是,该模块必须导入合格的 traits,以便其名称不会冲突:
use std::fmt::Write as FmtWrite; use std::io::Write as IoWrite; fn main() -> Result<(), Box<dyn std::error::Error>> { let mut s = String::new(); let mut v = Vec::new(); write!(&mut s, "{} {}", "abc", 123)?; // 使用 fmt::Write::write_fmt write!(&mut v, "s = {:?}", s)?; // 使用 io::Write::write_fmt assert_eq!(v, b"s = \"abc 123\""); Ok(()) }Run
Note: 该宏也可以在 no_std
设置中使用。
在 no_std
设置中,您负责组件的实现细节。
use core::fmt::Write; struct Example; impl Write for Example { fn write_str(&mut self, _s: &str) -> core::fmt::Result { unimplemented!(); } } let mut m = Example{}; write!(&mut m, "Hello World").expect("Not written");Run