考虑这个代码:
const VERSION: &'static str = env!("CARGO_PKG_VERSION");
fn main() {
// OK
println!("{}", "0.1.0");
// OK
println!("{}", env!("CARGO_PKG_VERSION"));
// OK
println!("{}", VERSION);
// OK
println!("0.1.0");
// OK
println!(env!("CARGO_PKG_VERSION"));
// error: format argument must be a string literal
println!(VERSION);
}
Run Code Online (Sandbox Code Playgroud)
const的 Rust 文档声明const创建一个编译时常量,并且在env! 声明env!宏创建了一个编译时已知&'static str值。
我很好奇,鉴于所有这三个值在编译时都是已知的并且具有固定大小,为什么它们不能互换使用?为什么它们在语义上不等价?
我想打印调用实例函数的结果std::path::Path。
我正在使用 Rust 1.43 和 GDB 9.1
主程序.rs
use std::path::Path;
fn main() {
let path = Path::new("/home/sweet/home");
println!("The path: {}", path.display());
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用 rust-gdb 调试它时,我得到以下信息:
$ rust-gdb target/debug/poc-gdb-pathbuf
...
>>> start
>>> n
>>> print path
$1 = (*mut std::path::Path) 0x55555557c000
>>> print &path
$2 = (*mut *mut std::path::Path) 0x7fffffffe0c0
>>> print *path
$3 = std::path::Path {
inner: std::ffi::os_str::OsStr {
inner: std::sys_common::os_str_bytes::Slice {
inner: 0x55555557c000
}
}
}
>>> print *path.is_absolute()
Could not find function named 'std::path::Path::is_absolute'
>>> …Run Code Online (Sandbox Code Playgroud)