Rust 调试格式化程序是否使用取消引用?
我对调试格式化程序如何到达引用链的末尾感到困惑 我的理解是,Rust 调试格式化程序是否使用取消引用?,rust,Rust,我对调试格式化程序如何到达引用链的末尾感到困惑 我的理解是,println!(“{:?}”,x)扩展为如下内容: ... print(&x) ... 它借用了x,而不是移动/复制它 现在打印的是MyNumber(1),而不是预期的&MyNumber(1): 由此我假设调试格式化程序遵循Rust语言本身为所有引用定义的通用Deref实现(impl-Deref for&T) 如果是这样,那么为什么下面的代码只打印MyNumber(1),而不打印1 use std::ops::{Deref}
println!(“{:?}”,x)
扩展为如下内容:
... print(&x) ...
它借用了x
,而不是移动/复制它
现在打印的是MyNumber(1)
,而不是预期的&MyNumber(1)
:
由此我假设调试格式化程序遵循Rust语言本身为所有引用定义的通用Deref
实现(impl-Deref for&T
)
如果是这样,那么为什么下面的代码只打印MyNumber(1)
,而不打印1
use std::ops::{Deref};
#[derive(Debug)]
struct MyNumber(u8);
impl Deref for MyNumber {
type Target = u8;
fn deref(&self) -> &Self::Target {
&self.0
}
}
fn main() {
let x = MyNumber(1);
println!("{:?}", x);
}
在我看来,调试格式化程序遵循Rust语言本身在&T
上实现的Deref
,但忽略了在自定义类型上实现的Deref
有人知道为什么会这样吗?非常感谢任何帮助
有人知道为什么会这样吗?非常感谢任何帮助
如果选中,则搜索:
非常感谢您的解释。我错误地认为这其中包含了一个递归的deref。在阅读了参考文档和实际实现之后,我可以说,将任务委托给底层的“可调试”似乎要优雅得多。我越来越喜欢生锈了!
use std::ops::{Deref};
#[derive(Debug)]
struct MyNumber(u8);
impl Deref for MyNumber {
type Target = u8;
fn deref(&self) -> &Self::Target {
&self.0
}
}
fn main() {
let x = MyNumber(1);
println!("{:?}", x);
}