Rust 理解铁锈书中的deref函数
我正在浏览锈书的部分,我对Rust 理解铁锈书中的deref函数,rust,Rust,我正在浏览锈书的部分,我对deref函数有疑问 structmybox(T); 为MyBox执行命令{ 类型目标=T; fn deref(&self)->&self::Target{ &self.0 } } 问题1。如果输入参数(&self)已经是对T的引用,为什么在访问函数体中的0时需要另一个&?这难道不会创建一个指向self&&self指针的指针,这是多余的吗 问题2:下面的deref函数不编译,但如果我在编译的主函数中执行了相同的操作 fn-deref(&self)->&self::Ta
deref
函数有疑问
structmybox(T);
为MyBox执行命令{
类型目标=T;
fn deref(&self)->&self::Target{
&self.0
}
}
问题1。如果输入参数(&self
)已经是对T
的引用,为什么在访问函数体中的0
时需要另一个&
?这难道不会创建一个指向self&&self
指针的指针,这是多余的吗
问题2:下面的deref
函数不编译,但如果我在编译的主函数中执行了相同的操作
fn-deref(&self)->&self::Target{
//让我的盒子:&MyBox=self;
让我的盒子:&&MyBox=&self;
//这不会使用上述两个my_box引用中的任何一个进行编译
//它要求另一个&。
我的盒子
}
上面的代码在主函数中使用时编译
fn main(){
让我的盒子:&MyBox=&MyBox(5);
我的盒子.0;
}
Q1:&self
是对structMyBox
本身的引用,而不是其内部字段self.0
的类型是T,这是实际的内部字段。要使返回类型&Self::Target
匹配,您需要类型为&T
的&Self.0
(意思是&Self.0)
)
Q2:与Q1相同,您需要使类型匹配
main
函数的返回类型是()
,最后一条语句是my_box.0代码>(注意;
)的类型匹配。Q1:&self
是对structMyBox
本身的引用,而不是其内部字段self.0
的类型是T,这是实际的内部字段。要使返回类型&Self::Target
匹配,您需要类型为&T
的&Self.0
(意思是&Self.0)
)
Q2:与Q1相同,您需要使类型匹配main
函数的返回类型是()
,最后一条语句是my_box.0代码>(注意;
)的类型匹配。经过4年的生锈,我仍然害怕写Deref
字。你的第一个问题是ABC,应该在书中加以解释。Deref
是锈迹编程的一个危险领域吗?锈迹四年后,我仍然害怕写Deref
word。你的第一个问题是ABC,应该在书中加以解释。Deref
在编程中是一个危险的领域吗?