当前位置: 首页 > 知识库问答 >
问题:

为什么Rust需要所有权注释而不是推断它?[重复]

尉迟越
2023-03-14

为什么Rust不能完全推断其变量的所有权?为什么需要注释?

共有1个答案

荀靖
2023-03-14

如果这是可能的,我相信这将是一个可怕的用户体验,因为:

  • 如果编译器无法推断对象的所有权,那么错误几乎无法理解(就像C模板链接中的试错方法)

然而,如果您难以解决多态性的缺乏,通常可以使用所有权类型对方法进行参数化,这可能被认为是推理的一种明确的替代方法,例如:

fn print_str(s: impl AsRef<str>) {
    println!("{}", s.as_ref());
}

fn main() {
    print_str("borrowed");
    print_str("owned".to_owned());
}
 类似资料:
  • 我读了这篇问答和Cocoacasts博文,我完全理解什么是< code>@escaping注释。 但老实说,我不明白我们为什么需要它。 上述Cocoacasts博客文章指出: 默认情况下,使闭包不转义有几个好处。最明显的好处是性能和编译器优化代码的能力。如果编译器知道闭包是非转义的,它可以处理内存管理的许多细节。 但是,Swift编译器可以确定<code>转义 这也意味着您可以在非转义闭包中使用s

  • 在这里(spring-data-elastic docs)中,我看到文档的映射(模式)是使用元数据(注释)自动生成的,这种方式与Spring Data MongoDB中的方式非常相似,但在我们的组织中,所有实体都使用@Mapping注释进行注释,并引用反映其结构的JSON文档,因此对于每个文档,尽管所有实体都有各自的注释,但都编写了实体-JSON文件。 一个示例类的小片段来提示我在说什么 和相应的

  • 问题内容: 为什么需要放入GUI更新代码? 为什么Swing本身无法在内部对其进行处理?为什么调用者必须关心swing如何处理UI更新? 问题答案: 摆动对象不是线程安全的。顾名思义,允许在以后的某个时间执行任务;但更重要的是,该任务将在AWT事件分配线程上执行。使用时r,任务是异步执行的;还有,直到任务完成执行后才会返回。

  • 我正在尝试理解Struts2中类的使用。 查看API: 类是否包含与我从获取的请求参数不同的请求参数集? 拦截器的struts似乎首先调用了,然后调用了,但我看不到这样做的任何理由。

  • 我的问题是:为什么这是流动?我想是出于安全原因,但我想不通。为什么实现是这样的,而不是在第一次调用(“/authorize”)之后立即获得访问令牌? 我们为什么需要这个代码?