Rust 内置*安全*方式,可移出Vec<;T>;?

Rust 内置*安全*方式,可移出Vec<;T>;?,rust,Rust,我一直在查看文档,到目前为止,我还没有看到一个内置函数可以安全地将项目移出Vec Vec::get存在,但这只是借用Vec::remove存在,虽然它确实移出了向量,但如果索引超出范围,它也会恐慌。因此,我有两个问题: 从向量中移动项目的预期/良好方式是什么 remove(&mut self,index:usize)->T超出范围时恐慌。恐慌的原因可能是什么?为什么它不像remove(&mut self,index:usize)->选项那样实现 如果你在生锈的情况下说安全,我们会想到内存安全.r

我一直在查看文档,到目前为止,我还没有看到一个内置函数可以安全地将项目移出
Vec

Vec::get
存在,但这只是借用
Vec::remove
存在,虽然它确实移出了向量,但如果索引超出范围,它也会恐慌。因此,我有两个问题:

  • 从向量中移动项目的预期/良好方式是什么
  • remove(&mut self,index:usize)->T
    超出范围时恐慌。恐慌的原因可能是什么?为什么它不像
    remove(&mut self,index:usize)->选项那样实现
  • 如果你在生锈的情况下说安全,我们会想到内存安全
    .remove(i)
    在常规锈蚀术语中肯定是安全的,只是澄清一下。呼叫
    恐慌!()
    是安全的

    .remove(i)
    .swap\u remove(i)
    的错误行为与使用
    v[i]
    语法索引向量的错误行为相同:如果
    i
    超出范围,则是程序员的错误,库函数会死机。这也被称为错误处理指南中的合同违约条款

    因此,该库背后的思想是,如果您知道
    i
    是有界的,那么您只能使用
    v[i]
    v.remove(i)
    ,如果您愿意,您确实可以检查它是否使用了
    i
    v.get(i)


    还有另一个函数,它允许你将一个元素移出一个向量而不至于惊慌失措,这就是
    v.pop()
    ,它删除向量中的最后一个项目,为
    Vec

    返回
    选项,还有一个函数,它将为你提供一个迭代器,遍历一系列被删除的值。不过现在我看了一下,这个方法也会在越界访问时出现恐慌…

    希望这个问题不是太推测性。。我是在寻求理解,而不是试图猜测。根据我的经验,很少有指数进入一个向量,而你不知道它们是否有效。恐慌适合这种常见情况,即无效索引表示错误。对于不常见的情况,您可以在使用索引之前简单地验证它。这是关于安全性的一个好观点。为错误使用该术语表示歉意。话虽如此,
    v.get
    v.remove
    之间在行为方面是否存在有意义的差异?
    get
    存在,因此有一种返回索引的方法。(主要索引工具是
    v[i]
    )。没有返回
    删除版本的选项。