面试题答案
一键面试冲突
在 Rust 中,当 DataPacket
同时实现 Serializable
和 Compressible
这两个都具有 process
方法的特征时,会产生方法名冲突。因为 Rust 不允许在同一作用域内有两个同名的方法(这里是结构体实现的不同特征的同名方法)。
解决方法
- 通过限定特征来调用方法:
可以在调用
process
方法时明确指定使用哪个特征的process
方法。例如:
trait Serializable {
fn process(&self);
}
trait Compressible {
fn process(&self);
}
struct DataPacket;
impl Serializable for DataPacket {
fn process(&self) {
println!("Serializable process");
}
}
impl Compressible for DataPacket {
fn process(&self) {
println!("Compressible process");
}
}
fn main() {
let packet = DataPacket;
(packet as &dyn Serializable).process();
(packet as &dyn Compressible).process();
}
- 使用不同的方法名:
修改其中一个特征的
process
方法名,避免命名冲突。例如将Compressible
特征的process
方法改为compress
:
trait Serializable {
fn process(&self);
}
trait Compressible {
fn compress(&self);
}
struct DataPacket;
impl Serializable for DataPacket {
fn process(&self) {
println!("Serializable process");
}
}
impl Compressible for DataPacket {
fn compress(&self) {
println!("Compressible compress");
}
}
fn main() {
let packet = DataPacket;
packet.process();
packet.compress();
}