问题标签 [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.
pointers - 当拥有的变量不可变时,如何插入析构函数调用`fn drop(&mut self)`调用?
我的理解是,当类型实现的变量Drop
超出范围时,fn drop(&mut self)
会插入对该函数的调用,并将新创建的可变引用传递给超出范围的变量。
但是,如果变量是不可变绑定的,并且可变借用它是非法的,这怎么可能呢?这是我正在谈论的一个例子:
这会产生以下错误:不能x
像预期的那样借用不可变的局部变量。
x
当被丢弃时必须发生类似的事情,因为drop
需要一个可变引用。
rust - 由于类型不匹配错误,文本文件解析函数无法编译
我正在尝试解析一个简单的配置文本文件,该文件每行包含一个三个单词的条目,布局如下:
我在这里(以及在 Rust Playpen 上)复制了执行解析(以及随后的编译错误)的函数:
本质上,我似乎创建了一个match
期望一个空元组的语句,并且还发现 a 的内容Vec<&str>
被包裹在一个Option
!
注意。这篇文章最初包含两个问题(我认为这是一个以不同方式表现出来的错误),但根据评论中的建议,我将其分成两个单独的帖子。后一篇文章在这里。
rust - 由于生存期/借用错误,文本文件解析函数无法编译
注意。这篇文章最初是包含两个问题的较大帖子的一部分(我认为这是一个以不同方式表现出来的错误),但为了遵守网站指南,我将它分成两个单独的帖子,这是第二个。第一篇文章在这里。
我正在尝试解析一个简单的配置文本文件,该文件每行包含一个三个单词的条目,布局如下:
我已经在此处(以及在 Rust 操场上)复制了执行解析(以及随后的编译错误)的函数:
本质上,我在借用检查器上遇到了麻烦;在我的代码中,没有word_vector
填充不指向的拥有对象line_slice
?我认为可能unwrap()
或collect()
返回了一个引用,并且它是超出范围的引用,但用于unwrap和collect的 Rust Docs建议不然。
rust - 无法重新借用变量,因为我不能将不可变的局部变量借用为可变的
我是 Rust 的新手,在借用检查器方面遇到了困难。
consume_byte
从工作中调用main
就好了。但是,如果我尝试consume_two_bytes
在两者之间添加另一个函数 ( ),它就会崩溃。
以下代码将无法编译,因为看起来reader
变量 inconsume_two_bytes
是不可变的并且不能被借用。
在函数签名中添加 a&mut
只会更改编译器错误。
rust - 借来的值对于结构来说没有足够长的时间存在编译器错误
我是该语言的新手,仍在与借阅检查器作斗争。我已经看到一些库使用 new() 函数,也就是不带参数的构造函数,并且它可以工作。基本上这意味着,返回的数据是在 new 的函数范围内创建的,并且不会在 new 的范围结束时被删除。
当我自己尝试这个时,借用检查器不会让这个代码通过。除了将 i32 可变引用作为参数传递给构造函数之外,如何进行这项工作。
我错过了什么吗?
编译器错误。
根据要求,这是我正在尝试使用的实际示例。有这个 GUI 库(Conrod),它有一些实例化它的步骤。就像下面的例子一样。
我的计划是将应用程序的绘图封装到一个结构中。那将有一个构造函数和一些辅助方法。为此,我必须有一个具有该类型实例的字段,该conrod::Ui<GlyphCache<'a>>
类型是上述 ui 变量的类型。
我认为向 main 添加东西(我的意思是在 main 中完成所有分配),可能不是最好的做事方式。
AppUi的实现。它不完整,但应该显示总体思路。只是为了确保我们在同一页面上,该类型conrod::Ui<GlyphCache<'a>>
需要一个生命周期参数。我想拥有与结构相同的生命周期。我知道如何做到这一点的唯一方法是让结构本身获取生命周期参数,并将其传递给 UI 类型。
========================
我采用的解决方案,最终奏效了(至少现在有效)。是创建一个辅助函数,它会返回一个 glyph_cache 并使用它。我不确定它是否是惯用的 Rust,现在只会使用它。可能应该习惯于使用借用检查器。
rust - 如何从 HashMap 获取可变结构?
我的所有状态都有一个哈希图,它是 a HashMap<String, Rc<State>>
,我想调用当前状态的 member fn init(&mut self)
。但我收到以下代码错误:
这是错误:
从文档来看,问题在于get_mut
返回对状态的可变引用,而不是对可变状态的引用。那么我如何获得对可变状态的引用呢?
rust - 如何解决此类项目中的借用和可变性地狱?
这个想法很简单:有些应用程序有一些 Windows。Windows 对其应用程序有某种类型的引用。他们需要使用彼此的方法。我已经编写了一些粗略的代码,但是当我解决一个问题时,我得到了一个新问题。
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:
rust - 函数声明中更具体的 self
鉴于此代码:
Rust 抱怨self.handle_keyboard(state, key)
说我不能借用 的可变引用self
,因为我已经self.display
在行中做了一个不可变的借用for ev in self.display.poll_events() {
。
如果我只想修改self
不在的字段self.display
,是否可以将其指定给编译器?它会是这样的:
rust - &self 移动包含 Box 的字段 - 移出借用的内容
我有一个结构体,其字段包含对其他结构体的引用(我没有定义)
并且HtmlHandlebars
必须实现一个功能
在该功能中,我需要将 移动Box
到另一个功能。像这样的东西:
但我有点卡住了,因为:
- 我无法移动 Box 引用,因为我正在借用
self
- 我无法复制 Box 引用,因为该结构没有实现复制
- 我无法修改
&self
为,&mut self
因为这会导致其他问题...
也许我做错了。我还能做些什么吗?我有哪些选择?
如果您需要更完整的代码概览,可以在此处找到
PS:我不知道如何描述标题中的情况,请随意更改