Rust 中 Trait 实现的状态

问题描述 投票:0回答:1

我正在尝试学习 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
 结构,因为我不拥有该代码。那么如何存储当前温度呢?

rust
1个回答
0
投票
但是没有状态性!

根本就是错误的,而你

不能实现任何类型的这个特定的特征,并且crate1::Water

根本不是你可以实现它的类型之一。

您肯定可以在这个替代方案上实现它

Water

pub struct Water { pub temperature: i32, pub state: String, }
所以原来的说法必须改写为:


外部类型不提供任何有状态性。

或者,您始终可以通过为自定义包装类型而不是直接外部类型实现

Matter

 来添加任意状态:

struct MatterialWater { water: crate1::Water, temperature: i32, state: String, }
    
© www.soinside.com 2019 - 2024. All rights reserved.