当前位置:嗨网首页>书籍在线阅读

34-特征对象和对象安全性

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

7.6.5 特征对象和对象安全性

对象安全性是指一组规则和限制,不允许违反上述规则构造相关的特征对象。请考虑如下代码:

// object_safety.rs
trait Foo {
    fn foo();
}
fn generic(val: &Foo) {
}
fn main() {
}

编译后出现了以下错误提示信息:

124.png 这让我们想到了对象安全性,它是一组禁止从某个特征创建特征对象的限制规则。在此示例中,由于我们的类型没有self引用,因此无法从中创建特征对象。在这种情况下,要想将任何类型转换为特征对象,类型上的方法必须是一个实例——通过引用获取self。因此,我们将特征方法声明foo改成如下形式:

trait Foo {
    fn foo(&self);
}

这使代码能够顺利编译。