文档中PathBuf有一个相当简单的例子:
use std::path::PathBuf;
let path: PathBuf = [r"C:\", "windows", "system32.dll"].iter().collect();
Run Code Online (Sandbox Code Playgroud)
一旦你阅读了宏语法,这还不算太糟糕。基本上,我们需要至少两个参数,第一个需要可转换为PathBufvia Into。每个后续参数都push在末尾 ed ,它接受任何可以变成对 a 的引用的东西Path。
macro_rules! build_from_paths {
($base:expr, $($segment:expr),+) => {{
let mut base: ::std::path::PathBuf = $base.into();
$(
base.push($segment);
)*
base
}}
}
fn main() {
use std::{
ffi::OsStr,
path::{Path, PathBuf},
};
let a = build_from_paths!("a", "b", "c");
println!("{:?}", a);
let b = build_from_paths!(PathBuf::from("z"), OsStr::new("x"), Path::new("y"));
println!("{:?}", b);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1849 次 |
| 最近记录: |