首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在锈蚀中声明一个向量域

在锈蚀中声明一个向量域
EN

Stack Overflow用户
提问于 2014-11-30 10:26:34
回答 1查看 1K关注 0票数 0

我想声明一个具有锈蚀特征向量类型的成员,但是它返回了这个错误:

error: explicit lifetime bound required

这就是我迄今尝试过的:

代码语言:javascript
复制
struct Lion {
    legs: int,
}

trait Animal {
   fn eat(&self);
}

impl Animal for Lion {
    fn eat(&self) {
        println!("Eat");
    }
}

struct Zoo {
    animals: Vec<Animal>,
}

我试图在互联网上搜索如何在没有运气的情况下修复这个错误。有人能给我点光吗?非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2014-11-30 10:45:15

Animal是一个特性,这意味着它几乎可以通过任何东西来实现。因此,您必须告诉编译器,在Vec中实现Vec的每个东西所包含的引用将有效多长时间。

例如,您可能有一个包含短暂生命周期的Dodo;您不希望它在Vec中灭绝,从而导致内存不安全!

你需要用任何一个

代码语言:javascript
复制
struct Zoo {
    animals: Vec<Animal + 'static>,
}

代码语言:javascript
复制
struct Zoo<'a> {
    animals: Vec<Animal + 'a>,
}

第一种声明,任何可访问的引用都将在程序的整个生命周期内有效。第二种状态是,存在一些可访问的所有引用都有效的生存期'a。但问题是,这段代码无论如何都是无效的,因为.

代码语言:javascript
复制
error: the trait `core::kinds::Sized` is not implemented for the type `Animal+'static`

您不能有一个值的Vec是动态大小的,其中包括特征。您可以通过使用Box<Animal + 'xxx>&'xxx Animal + 'xxx来解决这个问题。Box将更容易管理。

编辑:准确地说,任何接受Sized?参数的类型都在这里工作。这归结为任何形式的间接参考。RcArc可能也能工作。

FYI,第二种形式基本上只表示“对所有生存期'xxx ( &'xxx部件)都有效的借用引用,对实现Animal的值有效,其中所述值包含的引用至少对生存期'xxx ( + 'xxx部分)有效。”

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27212238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档