我正在尝试学习 Rust,而单独实现特征背后的选择对我来说毫无意义。表面上,这很有用,因为它允许您向不属于您的类型添加行为。但没有状态!
例如,假设我在某个板条箱中有一个结构
Water
,但我不拥有。我想实现我的特质 Matter
的行为来体现物质状态的行为。
板条箱1
struct Water {
num_moles: u128,
// suppose there's some stuff here about molecular structure
...
}
板条箱2
trait Matter {
fn temperature(&self) -> i32;
fn melt(&mut self) -> ();
fn freeze(&mut self) -> ();
fn evaporate(&mut self) -> ();
fn condense(&mut self) -> ();
fn get_matter_state(&self) -> str;
}
现在,我想实现此功能以使 Water
成为
Matter
的类型,但我需要状态变量和常量变量才能执行此操作。但在
impl Matter for Water
区块中,我无法做到这一点。然而,我也无法编辑
Water
结构,因为我不拥有该代码。那么如何存储当前温度呢?
但是没有状态性!根本就是错误的,而你
不能实现任何类型的这个特定的特征,并且crate1::Water
根本不是你可以实现它的类型之一。您肯定可以在这个替代方案上实现它
Water
:
pub struct Water {
pub temperature: i32,
pub state: String,
}
所以原来的说法必须改写为:
外部类型不提供任何有状态性。
Matter
来添加任意状态:
struct MatterialWater {
water: crate1::Water,
temperature: i32,
state: String,
}