我怎么能用铁 rust 印一条路?

为了打印当前工作目录,我try 了以下操作:

use std::os;

fn main() {
    let p = os::getcwd();
    println!("{}", p);
}

rustc返回时出现以下错误:

[wei2912@localhost rust-basics]$ rustc ls.rs 
ls.rs:5:17: 5:18 error: failed to find an implementation of trait core::fmt::Show for std::path::posix::Path
ls.rs:5     println!("{}", p);
                           ^
note: in expansion of format_args!
<std macros>:2:23: 2:77 note: expansion site
<std macros>:1:1: 3:2 note: in expansion of println!
ls.rs:5:2: 5:20 note: expansion site

推荐答案

正如您所发现的,打印Path的"正确"方法是通过.display方法,该方法返回a type,实现Display.

Path本身没有实现Display是有原因的:格式化字符串的路径是有损操作.并非所有操作系统都存储与UTF-8兼容的路径,格式化 routine 都隐式地只处理UTF-8数据.

例如,在我的Linux系统上,一个值为255的字节是一个完全有效的文件名,但在UTF-8中这不是一个有效的字节.如果试图将Path打印为字符串,则必须以某种方式处理无效数据:.display将用替换字符U+FFFD替换无效的UTF-8字节序列,但此操作无法反转.

总之,Path不应该像字符串一样处理,因此它们不会实现Display来鼓励这样做.

Rust相关问答推荐

trait 中self 的显式生命周期似乎导致E0499无法在循环中多次borrow * emits 器作为可变的

交叉术语未正确清除屏幕

在Rust中宏的表达式中提取对象

在Rust中,在实现特征`Display`时,如何获取调用方指定的格式?

为什么铁 rust S似乎有内在的易变性?

如何高效地将 struct 向量中的字段收集到单独的数组中

Rust,如何从 Rc> 复制内部值并返回它?

具有多个键的 HashMap

为什么需要静态生命周期以及在处理 Rust 迭代器时如何缩小它?

当锁被释放时,将锁包装到作用域中是否会发生变化?

Rust Redis 中的 HSET 命令问题

是否可以通过可变引用推进可变切片?

rust tokio::spawn 在 mutexguard 之后等待

返回迭代器的特征

如何在 Rust 中创建最后一个元素是可变长度数组的 struct ?

类型组的通用枚举

你能用 Rust 和 winapi 制作 Windows 桌面应用程序吗?

Rust 生命周期:不能在方法内重新borrow 可变字段

返回 &str 但不是 String 时,borrow 时间比预期长

返回引用的返回函数