Rust “a”是什么;“标称类型”;在固有实现的上下文中?
我目前正在学习如何理解固有的实现。什么是“名义类型”,当他们说“与实现类型相关的项目”时,他们指的是什么Rust “a”是什么;“标称类型”;在固有实现的上下文中?,rust,Rust,我目前正在学习如何理解固有的实现。什么是“名义类型”,当他们说“与实现类型相关的项目”时,他们指的是什么 是否存在与C或C++相关的类比?< P>一个固有的实现等价于用OOP语言创建类。Rust的区别在于数据与实现是分开的: /* Data */ struct Foo { // all data there //... } /* Inherent implementation */ impl Foo { fn bar(&self) { //...
是否存在与C或C++相关的类比?
< P>一个固有的实现等价于用OOP语言创建类。Rust的区别在于数据与实现是分开的:/* Data */
struct Foo {
// all data there
//...
}
/* Inherent implementation */
impl Foo {
fn bar(&self) {
//...
}
}
- 标称类型是您实现的数据
- 可关联项是您添加到数据中的方法。这些函数很特殊,因为您可以使用语法
调用它们foo.bar()
与trait实现相反,内在实现被称为:
/* Data */
struct Foo {
// all data there
//...
}
/* Inherent implementation */
impl Foo {
fn bar(&self) {
//...
}
}
<>在C++中,你不能将“固有实现”和“特征实现”分开(我把这些引用放在引用之间,因为那些术语在C++中是没有意义的)。
注意,与C++不同,在锈蚀中,方法并不是真正不同于自由函数。您可以像这样调用
bar
方法:
Foo::bar(foo);
如果定义此函数:
fn qux(f: &Foo) {
//...
}
它将具有与
Foo::bar
相同的签名,这是语言参考。用它来学习英语当然是可能的,但有点像通过阅读字典来学习英语。你试过这个吗
无论如何,正如第一段所述,“名义类型”是:
impl /* --> */ Point /* <-- this is the "nominal type" */ {
fn log(&self) { ... }
}
(作为旁白:段落中的代词(如“他”或“他”)将成为impl
中的self
或self
)
impl
将这些项目与标称类型相关联。注意HAIR
是如何在Raymond
类型中“内部”的。您还可以将上述代码编写为:
struct Raymond;
const RAYMOND_HAIR: Colour = Colour::Brown;
fn raymond_dance(ray: &mut Raymond) { ... }
fn main() {
let mut ray = Raymond;
println!("Raymond's hair is {}", RAYMOND_HAIR);
raymond_dance(&mut ray);
}
这里没有固有的impl
s,因此RAYMOND_HAIR
和RAYMOND_dance
项目与RAYMOND
类型没有直接关联。除了方便之外,两者之间没有根本区别
至于把这个绑定回C++…这是棘手的,因为锈区分固有和非固有的<代码> IMPL//COS> S和C++…不。最接近的类比是,它们就像
struct
主体的部分,不是字段,也不是基类中的重写方法
struct Raymond;
const RAYMOND_HAIR: Colour = Colour::Brown;
fn raymond_dance(ray: &mut Raymond) { ... }
fn main() {
let mut ray = Raymond;
println!("Raymond's hair is {}", RAYMOND_HAIR);
raymond_dance(&mut ray);
}