Rust 可不可以部分实施?

Rust 可不可以部分实施?,rust,Rust,我正在读《编程锈蚀》一书,了解了锈蚀的特性和泛型类型。我发现类型边界可以放在trait的方法上。然后,我构建了以下trait并将其实现为一个struct 使用std::fmt::Display; 性状测试{ fn show(&self) 哪里 T:显示; fn测试(自我测试); } 结构{ 字段:T, } S的impl测试{ fn show(&self) 哪里 T:显示器, { println!(“我的字段:{}”,self.field); } fn测试(&self){ println!(“仅用

我正在读《编程锈蚀》一书,了解了锈蚀的特性和泛型类型。我发现类型边界可以放在trait的方法上。然后,我构建了以下trait并将其实现为一个struct

使用std::fmt::Display;
性状测试{
fn show(&self)
哪里
T:显示;
fn测试(自我测试);
}
结构{
字段:T,
}
S的impl测试{
fn show(&self)
哪里
T:显示器,
{
println!(“我的字段:{}”,self.field);
}
fn测试(&self){
println!(“仅用于测试”);
}
}
以下代码无法按预期编译:

structr;
fn main(){
设s=s{field:R{};
s、 show();
}
但是下面的代码将编译并运行

structr;
fn main(){
设s=s{field:R{};
s、 test();
}
s
被定义为
s{field:R{}}
时,不应该仅仅拒绝代码吗?这是否意味着
s
是部分实现
trait T
s
的一个实例

可不可以部分实施

不,要么全是,要么什么都没有

但是,为什么一个代码正在编译,而另一个则不会

原因是
show

fn显示(&self),其中T:Display;
这意味着,当您想要调用此方法时,
T
必须实现
Display
。如果没有实现,就不能调用它

锈“仿制药”工作不同于C++,例如:

<>在C++中有(替换失败不是错误)。这有点像。
Rust在边界上起作用,这意味着您必须指定您的“泛型”必须具有什么样的特性才能使用这些函数。在这种情况下,您可以调用,因为您指定,
T
必须实现该特性

没有为
test
方法指定此界限,因此您可以使用所需的任何类型调用它

可不可以部分实施

不,要么全是,要么什么都没有

但是,为什么一个代码正在编译,而另一个则不会

原因是
show

fn显示(&self),其中T:Display;
这意味着,当您想要调用此方法时,
T
必须实现
Display
。如果没有实现,就不能调用它

锈“仿制药”工作不同于C++,例如:

<>在C++中有(替换失败不是错误)。这有点像。
Rust在边界上起作用,这意味着您必须指定您的“泛型”必须具有什么样的特性才能使用这些函数。在这种情况下,您可以调用,因为您指定,
T
必须实现该特性


没有为
test
方法指定此绑定,因此您可以使用任何类型调用它。

请使用
rustfmt
格式化代码。您可以在上右上角的工具下找到它。请使用
rustfmt
格式化您的代码。您可以在上右上角的工具下找到它。众所周知,实现trait意味着实现它的所有方法。因此,为
S
执行trait
Test
,这意味着
Test
show
都已实现。为什么rust接受的
S
不符合
Test
方法公开的所有类型绑定要求。@shengjiew更正它有
show
的实现,否则编译器会给出一个类似
show
的错误,因为
S
找不到该方法,因为行为与,函数存在,但不能用于该类型。众所周知,实现trait意味着实现它的所有方法。因此,为
S
执行trait
Test
,这意味着
Test
show
都已实现。为什么rust接受的
S
不符合
Test
方法公开的所有类型绑定要求。@shengjiew更正它有
show
的实现,否则编译器会给出一个类似
show
的错误,因为
S
找不到该方法,因为行为与,函数存在,但不能用于该类型。