问题标签 [borrowing]

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 投票
0 回答
352 浏览

rust - 如何为枚举变体实现 Borrow,以便可以使用字符串切片作为 HashMap 的键?

在以下场景中:

我可以通过使用Borrow特征来实现这一点,所以我不需要 a &Key,只需要 a 就&str可以了:

但是,当我的密钥是枚举时,无法实现Borrow

是否有一种符合人体工程学的方法来实现get_from_map,无需克隆key,以便它以某种方式只查找Text键?

我的第一直觉是实现Borrow一个BorrowedKey新类型,但这似乎不起作用,因为Borrow需要返回一个引用。

0 投票
1 回答
193 浏览

reference - 多个生命周期和移动:对借用的“x”的赋值发生在这里

我有一个带有函数的结构next()(类似于迭代器,但不是迭代器)。该方法返回修改后的下一个状态(保留原始状态)。所以:fn next(&A) -> A

我从一个不需要生命周期的简单结构开始(示例中的结构 A),然后扩展它以添加对新结构(结构 B)的引用。

问题是我现在需要为我的结构指定生命周期,并且由于某种原因我的方法next()不再起作用。

我怀疑每次迭代的新结构的生命周期仅限于创建它的范围,我不能将它移出这个范围。

是否可以保留我的next()方法的行为?

在这里试试

错误是:

0 投票
1 回答
438 浏览

vector - 无法使用 Vec 两次,我不能借用它

我试图实现 Rosetta Code 密码生成器:

Rust 不允许我使用借用值或直接值:

帮助消息说我应该删除借用,因为类型不匹配,但删除它后仍然出现错误,因为值已被移动。

0 投票
0 回答
24 浏览

rust - 为什么看起来闭包借用了 self 而不是 self 的字段?

为什么以下代码在借用检查器中失败?

出现错误(游乐场

看起来像是x借来self的闭包testme();它不应该只是借来的self.a吗?也许我错过了一些东西。

0 投票
1 回答
5158 浏览

rust - 在盒装的未来使用参考变量时“需要显式生命周期”

我正在尝试使用在中创建的结构main()并将其传递给返回 boxed 的函数Future。但是,我遇到了生命周期和借贷问题,似乎无法干净地解决这个问题。

这是我的结构和功能:

编译时出现以下错误:

我想发生错误是因为SomeStruct在s 范围内Future使用并且可能在main()s 范围之外使用,因此编译器要求我将生存期更改为'static. 这是我到目前为止尝试的(不成功):

  • 将生命周期更改'static为编译器建议的,这会在main().
  • val按照编译器的建议添加移动ok(20).and_then(move |val| {,这会在第二次调用get_future().
  • 使用lazy_static板条箱显式初始化SomeStruct为静态(如此处所建议),但是我在尝试时遇到了宏错误。

整个例子可以在这里找到。我省略了一些细节来创建一个最小的例子。使用tokio-core和会出现问题futures = "0.1"。不幸的是,由于依赖另一个库,迁移到版本"0.2"不是一种选择。

0 投票
1 回答
369 浏览

rust - 为什么重新借用仅适用于取消引用的指针?

这个问题和代码改编自Why does Creating a mutable reference to a dereferenced mutable reference work? . 那里的答案解释了重新借用,但没有解释围绕它的约定的原因。

下面的两个调用test似乎等效,为什么只有第一个有效?

0 投票
0 回答
65 浏览

rust - “使用抵押移动价值”

我有以下代码(您可以在 play.rust-lang.org 上尝试):

(这是一个例子,不是真实的,如果它看起来没用也不要担心)

对我来说看起来不错,但是借用检查器给了我以下错误:

这个错误的原因是什么,我该如何解决?

0 投票
2 回答
120 浏览

rust - 匹配选项时,`Some(&a) => a` 和 `Some(a) => *a` 有什么区别?

为什么会通过:

操场

但这不是?:

操场

0 投票
1 回答
466 浏览

memory - 无法移出作为参数传递的可选成员的借用内容

find在基本的内存存储解决方案上定义了一个函数。我试图通过创建一个struct被调用的方法来灵活地传递条件搜索选项SearchOpts

操场

我不知道这是否是实现此类功能的最佳方式,但我也不明白在这种情况下如何取悦借用检查器(这是我想首先学习的东西)。

0 投票
1 回答
90 浏览

iterator - 尝试遍历网格结构会导致“借用值的寿命不够长”

我正在尝试创建一个可以存储监视器位置数据的数据结构。

我采用的方法是每个屏幕都有对 4 个邻居的引用,这些邻居存储在HashMap<Direction, Rc<RefCell<Screen>>>.

我正在努力解决的是如何在一个方向上“移动”/迭代,直到我到达网格的边缘:

操场

我理解为什么会发生错误,但我不知道如何修复它。我试图克隆original_screenand next,但是编译器抱怨我试图设置original_screen同时仍然借用它。