特质用于对要从结构体实现的某些功能进行分组,但是是否可以从特征中访问结构体字段?
我可以想象在特征中声明字段,以便字段也被抽象化。我还没有找到这样的语法;还有其他解决方案吗?否则,不可能有使用特征的非静态方法,对吗?
我知道C#的面向对象程序设计,并且我正在研究Rust,以尝试适应C#中我已经知道的OOP功能。
最佳答案
这听起来像是您误解了特质是如何工作的。特质不能有田野。如果要提供从特征访问字段的权限,则需要在该特征中定义一个方法(例如get_blah
)。
如果您询问是否可以从该结构的特征实现中访问该结构的字段,则可以。该结构知道它是自己的类型,因此没有问题。
trait Pet {
fn is_smelly(&self) -> bool;
}
struct Dog {
washed_recently: bool,
}
impl Pet for Dog {
fn is_smelly(&self) -> bool {
!self.washed_recently
}
}
如果您正在编写特征的默认实现(即在特征中定义方法主体),则不能,您无法访问字段。默认实现只能使用在特征或 super 特征中定义的方法。
关于oop - 是否可以从特征内访问结构字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64081744/