问题标签 [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 回答
98 浏览

rust - 我可以制作一个既可以使用值又可以使用对特征的借用引用的结构?

我想制作一个包装另一种类型但可以采用实现给定特征的值的拥有和借用版本的结构。

例如,假设我有 trait Foobar

我现在想创建一个结构来包装这个特征的值或借用引用:

在这里,我希望 FoobarWrapper 与两者一起工作,Baz&Baz考虑到impl Foobar for Baz.

我想出了一种可能可行的解决方案,但我不知道它是否是惯用的,那就是简单地做:

如果我没记错的话,这对实现 Foobar 的值的任何引用也是 Foobar 的实现者。但这是你应该这样做的方式吗?

0 投票
2 回答
560 浏览

rust - 为什么 Vec::split_at_mut 为范围的其余部分借用向量?

Vec<T>有两种方法:

它们都对向量进行可变引用。但是借用的范围似乎不同,例如:

doesnt_work函数没有编译,说已经有一个可变借用nums并且它结束并且函数结束。如果我忽略从split_at_mut.

0 投票
1 回答
92 浏览

rust - 我如何理解这个借来的价值错误?构建 Vec<&PathBuf>

我如何理解我违反了 Borrow Checker 的哪一部分?

因为 Rust 的标准库walk_dir列为“不稳定”(截至 2015-09-27),我想我会尝试构建自己的函数来获取目录中的所有文件,并且它是我自己的子目录。

这是我仅列出目录中的文件而不查看子目录部分的内容:

当我尝试运行此代码时,我收到此错误:

如果我错了,请纠正我,但我的理解非常松散,Rust 的一个很酷的特性是你必须明确声明对象何时应该存在于函数范围之后。我认为我的问题是,在 for 循环的迭代结束时,PathBuf创建的那个被丢弃了,所以它持有对已经消失的东西的引用。let p = path.unwrap().path()output Vec

如果是这样的话:

当我在做这样愚蠢的事情时,如何建立更好的直觉?

有没有更好的惯用方法来从返回生命周期有限的资源的函数中构建元素向量?

0 投票
2 回答
3658 浏览

rust - 如何获得一个函数来返回类似字符串的 Vec?

我有一大块代码可以打开文件并逐行搜索内容,然后对每个匹配的行执行一些操作。我想将其分解为它自己的函数,该函数获取文件的路径并为您提供匹配的行,但我无法弄清楚如何正确地将其分解。

这是我认为接近的内容,但出现编译器错误:

和编译器错误:

如果我使用String而不是&str我得到这个错误:

哪种有意义。我猜这些行留在buffer函数末尾超出范围的行内,因此收集对字符串的引用向量并没有真正帮助我们。

如何返回一组行?

0 投票
1 回答
63 浏览

string - 使用 `pop3::POP3Stream::connect` 连接到给定`host`的运行时?

我正在尝试读取用户的输入,然后将其用作 POP3 库的 URL。将String我得到的转换为字符串切片时,它的寿命不够长,无法使用。这对我来说很奇怪,原因有两个:

  1. 因为使用 POP3 对象的所有东西都在同一个块内,所以 str 切片的生命周期应该是整个块的生命周期,这将涵盖所有内容

  2. 我已经尝试了几乎所有我能想到的不同代码配置,但无济于事,我每次都得到相同的错误。

0 投票
1 回答
99 浏览

string - 字符串到str切片,str切片的寿命不够长

好的,这是我的 MCVE,马上开始。

我似乎想不出满足的方法do_something。在我的实际代码中,do_something是一个库函数,所以我无法更改它的签名。

- 谢谢

0 投票
1 回答
2848 浏览

rust - Pushing something into a vector depending on its last element

I would like to get the last element of a vector and use it to determine the next element to push in. Here's an example how it doesn't work, but it shows what I'm trying to achieve:

I can't use push while the vector is also borrowed immutably:

What would be a good way to do this?

0 投票
2 回答
92 浏览

rust - 临时持有借来的物件

结构Parent字段必须存储Option

有必要暂时阻止使用 中的对象的可能性fn main(),直到您调用.unbind()

0 投票
1 回答
610 浏览

rust - 变量在嵌套 lambda 中存活时间不够长的借用检查错误

我在嵌套的 lambda 中遇到错误。

我可以看到为什么会发生这种情况,我可以row通过将 through 的值线程化到内部 lambda 来修复它:

这太可怕了,不可能是最好的解决方案。如何在不必显式传递它们的情况下引用父作用域中的变量?

0 投票
1 回答
2100 浏览

rust - 如何在不打扰借用检查器的情况下对双向地图进行建模?

为什么我不能在同一个结构中存储一个值和对该值的引用?我了解到我不能在同一个结构中存储值和引用。

建议的解决方案是:

最简单和最推荐的解决方案是不要尝试将这些项目放在同一个结构中。通过这样做,您的结构嵌套将模仿代码的生命周期。将拥有数据的类型放在一个结构中,然后提供允许您根据需要获取引用或包含引用的对象的方法。

但是,我不知道如何在我的具体案例中应用它:

我想构建双向映射,由两个内部HashMaps 实现。显然,其中之一必须拥有数据。但是,另一部分对于双向地图也是必不可少的,所以我看不出如何在保持双向地图界面的同时将这两者分开。