问题标签 [borrow-checker]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
153 浏览

pointers - 当拥有的变量不可变时,如何插入析构函数调用`fn drop(&mut self)`调用?

我的理解是,当类型实现的变量Drop超出范围时,fn drop(&mut self)会插入对该函数的调用,并将新创建的可变引用传递给超出范围的变量。

但是,如果变量是不可变绑定的,并且可变借用它是非法的,这怎么可能呢?这是我正在谈论的一个例子:

这会产生以下错误:不能x像预期的那样借用不可变的局部变量。

x当被丢弃时必须发生类似的事情,因为drop需要一个可变引用。

0 投票
1 回答
48 浏览

rust - 由于类型不匹配错误,文本文件解析函数无法编译

我正在尝试解析一个简单的配置文本文件,该文件每行包含一个三个单词的条目,布局如下:

我在这里(以及在 Rust Playpen 上)复制了执行解析(以及随后的编译错误)的函数:

本质上,我似乎创建了一个match期望一个空元组的语句,并且还发现 a 的内容Vec<&str>被包裹在一个Option!

注意。这篇文章最初包含两个问题(我认为这是一个以不同方式表现出来的错误),但根据评论中的建议,我将其分成两个单独的帖子。后一篇文章在这里

0 投票
1 回答
48 浏览

rust - 由于生存期/借用错误,文本文件解析函数无法编译

注意。这篇文章最初是包含两个问题的较大帖子的一部分(我认为这是一个以不同方式表现出来的错误),但为了遵守网站指南,我将它分成两个单独的帖子,这是第二个。第一篇文章在这里

我正在尝试解析一个简单的配置文本文件,该文件每行包含一个三个单词的条目,布局如下:

我已经在此处(以及在 Rust 操场上)复制了执行解析(以及随后的编译错误)的函数:

本质上,我在借用检查器上遇到了麻烦;在我的代码中,没有word_vector填充不指向的拥有对象line_slice?我认为可能unwrap()collect()返回了一个引用,并且它是超出范围的引用,但用于unwrapcollect的 Rust Docs建议不然。

0 投票
1 回答
1011 浏览

rust - 无法重新借用变量,因为我不能将不可变的局部变量借用为可变的

我是 Rust 的新手,在借用检查器方面遇到了困难。

consume_byte从工作中调用main就好了。但是,如果我尝试consume_two_bytes在两者之间添加另一个函数 ( ),它就会崩溃。

以下代码将无法编译,因为看起来reader变量 inconsume_two_bytes是不可变的并且不能被借用。

在函数签名中添加 a&mut只会更改编译器错误。

0 投票
2 回答
6514 浏览

rust - 借来的值对于结构来说没有足够长的时间存在编译器错误

我是该语言的新手,仍在与借阅检查器作斗争。我已经看到一些库使用 new() 函数,也就是不带参数的构造函数,并且它可以工作。基本上这意味着,返回的数据是在 new 的函数范围内创建的,并且不会在 new 的范围结束时被删除。

当我自己尝试这个时,借用检查器不会让这个代码通过。除了将 i32 可变引用作为参数传递给构造函数之外,如何进行这项工作。

我错过了什么吗?

编译器错误。

根据要求,这是我正在尝试使用的实际示例。有这个 GUI 库(Conrod),它有一些实例化它的步骤。就像下面的例子一样。

我的计划是将应用程序的绘图封装到一个结构中。那将有一个构造函数和一些辅助方法。为此,我必须有一个具有该类型实例的字段,该conrod::Ui<GlyphCache<'a>>类型是上述 ui 变量的类型。

我认为向 main 添加东西(我的意思是在 main 中完成所有分配),可能不是最好的做事方式。

AppUi的实现。它不完整,但应该显示总体思路。只是为了确保我们在同一页面上,该类型conrod::Ui<GlyphCache<'a>>需要一个生命周期参数。我想拥有与结构相同的生命周期。我知道如何做到这一点的唯一方法是让结构本身获取生命周期参数,并将其传递给 UI 类型。

========================

我采用的解决方案,最终奏效了(至少现在有效)。是创建一个辅助函数,它会返回一个 glyph_cache 并使用它。我不确定它是否是惯用的 Rust,现在只会使用它。可能应该习惯于使用借用检查器。

0 投票
1 回答
1603 浏览

rust - 如何从 HashMap 获取可变结构?

我的所有状态都有一个哈希图,它是 a HashMap<String, Rc<State>>,我想调用当前状态的 member fn init(&mut self)。但我收到以下代码错误:

这是错误:

从文档来看,问题在于get_mut返回对状态的可变引用,而不是对可变状态的引用。那么我如何获得对可变状态的引用呢?

0 投票
1 回答
155 浏览

rust - 如何解决此类项目中的借用和可变性地狱?

这个想法很简单:有些应用程序有一些 Windows。Windows 对其应用程序有某种类型的引用。他们需要使用彼此的方法。我已经编写了一些粗略的代码,但是当我解决一个问题时,我得到了一个新问题。

0 投票
2 回答
1046 浏览

rust - Cannot move out of borrowed content and Builder pattern

I am just learning Rust. I am trying to create a builder struct for my Game struct. Here is the code:

But this code complains in the last line input: self.input with this:

I think I understand why. Since the argument passed in the function is &self, I cannot take ownership of it, and that what the last line is doing.

I thought that maybe changing &self to self would work, but then the compile argues that I cannot mutate self.

There is also the Copy trait from what I know, and that maybe should solve the problem. But Input is basically a HashMap, which means that a copy could be expensive if the hash itself is too big.

How would be a nice way of solving this problem?

Edit:

I tried doing this:

But the compiler complains:

0 投票
1 回答
63 浏览

rust - 函数声明中更具体的 self

鉴于此代码:

Rust 抱怨self.handle_keyboard(state, key)说我不能借用 的可变引用self,因为我已经self.display在行中做了一个不可变的借用for ev in self.display.poll_events() {

如果我只想修改self不在的字段self.display,是否可以将其指定给编译器?它会是这样的:

0 投票
1 回答
151 浏览

rust - &self 移动包含 Box 的字段 - 移出借用的内容

我有一个结构体,其字段包含对其他结构体的引用(我没有定义)

并且HtmlHandlebars必须实现一个功能

在该功能中,我需要将 移动Box到另一个功能。像这样的东西:

但我有点卡住了,因为:

  • 我无法移动 Box 引用,因为我正在借用self
  • 我无法复制 Box 引用,因为该结构没有实现复制
  • 我无法修改&self为,&mut self因为这会导致其他问题...

也许我做错了。我还能做些什么吗?我有哪些选择?

如果您需要更完整的代码概览,可以在此处找到

PS:我不知道如何描述标题中的情况,请随意更改