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]
)。没有返回删除版本的选项。