是否存在技术上的原因,为什么实现不仅仅是impl Foo <T>?

l0b*_*0b0 1 generics syntax rust

我刚刚了解到使用泛型的结构被声明为struct Foo<T>,并且实现被声明为impl<T> Foo<T>.在书中解释下列方式的差异:

请注意,我们必须声明T只是后impl才能使用T的类型Point<T>.声明T作为通用型后impl是除锈是如何知道在尖括号中的类型Point是一个泛型类型,而不是一个具体类型.

再一次,我是一个新手,但不能同样的论点,必须声明struct<T> Foo<T>(甚至可能fn<T> foo<T>(bar: T))?

DK.*_*DK. 7

impl Foo<T> { ... }
Run Code Online (Sandbox Code Playgroud)

T类型参数,还是名为T?的实际类型?如果您回答了第二个问题,那么您已经完全抛弃了泛型:不可能为一组通用类型实现功能.如果你回答了第一个,那么你如何建议用户这样做:

impl Foo<T> { /* generic stuff */ }
impl Foo<i32> { /* i32-specific stuff */ }
impl Foo<u32> { /* u32-specific stuff */ }
Run Code Online (Sandbox Code Playgroud)

这也只是3 impl块进行命名的类型参数T,i32u32分别.

你可能会说"好吧,只是从上下文决定".现在,为了弄清楚发生了什么,用户不仅要检查模块的其余部分,还要检查所有导入的符号以及标准库的前奏中的任何内容,以便确定类型是否为参数.鲁斯特憎恶这种模棱两可的态度.

这是目前为止,简单的编译器和读者只是具体说明是什么,是不是一个参数.

你不必与要做到这一点struct,因为在括号中的东西不可能是任何其他的不是类型参数声明.