当计数为 1 时,有条件地将 T 从 Rc 移出

2024-04-21

有没有办法将物体从Rc<T>当计数为1?我正在考虑如何实施:

fn take_ownership<T>(shared: Rc<T>) -> Result<T, Rc<T>> { ... }

语义是你得到T如果计数是1然后你回来shared否则您可以稍后重试。


标准库提供了Rc::try_unwrap https://doc.rust-lang.org/std/rc/struct.Rc.html#method.try_unwrap功能:

fn try_unwrap(this: Rc<T>) -> Result<T, Rc<T>>

返回包含的值,如果Rc恰好有一个强 参考。

否则,一个Err返回相同的Rc那是被传入的。

即使存在突出的弱引用,这也会成功。

Examples

use std::rc::Rc;

let x = Rc::new(3);
assert_eq!(Rc::try_unwrap(x), Ok(3));

let x = Rc::new(4);
let _y = Rc::clone(&x);
assert_eq!(*Rc::try_unwrap(x).unwrap_err(), 4);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当计数为 1 时,有条件地将 T 从 Rc 移出 的相关文章

随机推荐

  • C代码运行速度更快吗?

    从 Objective C 调用 C 代码是否有任何性能提升 我在某处读到 与使用函数调用的其他语言相比 消息传递速度较慢 那么 如果我从 Objective C 代码调用 C 函数 我是否可以避免消息传递开销 在优化性能时 是否建议使用
  • 如何在 Ubuntu 20.04 中安装 Python2.7 的 pip

    有什么方法可以为 Python2 7 安装 pip 吗 我可以通过安装 python2 7 sudo apt install python2 minimal 我尝试为此安装 pip sudo apt install python pip p
  • 为什么我的 JQuery .ajax 请求没有并行发出?

    我正在尝试使用 jQuery 并行发出两个 ajax 请求 如下所示 var sources source1 source2 sources each function var source this ajax async true typ
  • 是否可以使用 np 数组作为 h5py 数据集中的索引?

    我需要将多个数据集 每个数据集包含在一个单独的文件中 合并到属于最终文件的另一个数据集中 当部分数据集中的数据被复制到最终数据集中时 它们的顺序不会保留 部分数据集中的数据通过索引 映射 到最终数据集中 我创建了两个列表 final ind
  • 如何检测我的任何活动是否位于最前面并且对用户可见?

    我想在我的任何活动可见时启动一个意图 否则我会将其作为通知发布 并将由用户触发 为了决定这一点 我需要知道我的任何活动是否是最重要的 我该怎么做 我不知道有一种方法可以获取当前显示的活动 但是您可以结合使用活动生命周期 http devel
  • 使用迭代器从“查找”或“删除”中删除

    我想知道在 C 中从向量中删除元素的最佳实践是什么 我多次看到人们使用 std remove 查找并删除元素 然后使用擦除从向量中删除元素 但为什么它比使用 find 获取要删除的元素的迭代器然后使用该迭代器的擦除更好呢 Thanks st
  • Android核心库错误

    当我包含 jaxp jar 时 出现以下错误 trouble processing javax xml XMLConstants class 2009 05 08 16 53 18 TestProject Attempt to includ
  • bash:找不到 nodemon 命令 Windows 10

    I spent a lot of time looking for a solution but didn t find anything with my case So I checked global packages npm list
  • 我想检查android中的声音响度

    我正在开发一个应用程序 我必须检测语音的响度 意味着手机上有一些喊叫 它会在屏幕上显示响度级别 哪个 API 可以用于此目的 Look at http developer android com reference android medi
  • Android 流量统计数据报告的内容比我下载的内容还要多

    您好 我正在运行一个简单的下载测试 看看我的连接速度有多快 我记录了trafficStats rx值 然后下载了一个5MB的文件 记录了rx值 然后计算了差异 我知道这个文件正好是 5MB 这是代码 URL url new URL urlS
  • 如何在 sed 命令中使用变量

    我有一个名为 text file1 txt 的文件 文件中的内容是 主题 C US O AAA OU QA OU 12345 OU TESTAPP 现在我想要实现的是如下内容 主题 C US O AAA QA 12345 TESTAPP 当
  • 洪水填充算法是否考虑了 alpha 且不会在抗锯齿线周围留下边缘?

    我已经实现了一个典型的洪水填充算法 当使用纯色时 它按预期工作 其中我使用 ARGB 分量之间的欧几里德距离来比较颜色 我的问题是 如果您在透明背景上绘制类似抗锯齿红线的内容 我的洪水填充算法将不会填充大多数半透明像素 从而在对象周围留下条
  • Google Assistant 更改表面不起作用

    嗨 大家好 我目前正在尝试使用 Dialogflow 为 Google Assistant 构建一个应用程序 在特定意图期间 我想将用户重定向到他的手机 使用扬声器时 因为该意图需要精确的键盘输入 正如文档中所说 我正在打电话askForN
  • 1&1 Windows 托管服务器 web.config URL 重写问题

    我面临与 1 1 托管的 Windows 服务器中的 URL 重写相关的问题 我正在尝试使用 web config 文件重写 url 但它根本不起作用 给我错误或 500 19 错误总结 HTTP 错误 500 19 内部服务器错误 无法访
  • C# Excel 文本到列问题

    您好 我在 C 中调用了文本到列函数 但结果并不像我想要的那样 我的工作表的第一个单元格中有这些数据 Guest 0 12 10 2010 03 46 34 PM 66082 如果我从 Excel 手动运行 文本到列 我就明白了 Guest
  • 如何查看两个 Hg 存储库之间不同的所有文件的列表?

    我有一个包含大量工作代码的存储库 我团队中的另一位开发人员有一段时间没有任何更新 然后提交了大约 5 个变更集 所以 现在我们有两个相隔近两周的头 该提示不起作用 但我的变更集可以 我想看看两个存储库之间有什么区别 而不必合并它们 因为我不
  • OCLinEcore 和 Regex 创建有效的 IPv4 字符串

    我有一个 Ecore 模型 我试图在其中添加一些 OCL 约束 当我尝试创建有效 IPv4 形式的属性 字符串 时 我的问题就出现了 我想我应该使用正则表达式 但我根本不知道如何在 OCLinEcore 上使用正则表达式 从 Eclipse
  • 按类别划分的直方图颜色

    我有一个 pandas 数据框 其中包含 2 列 height 和 class class 是一个包含 3 个值 1 2 和 5 的列 现在我想按类别制作高度数据和颜色的直方图 plot19 s vegetation height plot
  • ReSharper 混淆了我的视觉工作室 - 将视觉工作室重置为默认值

    我使用 ReSharper 来执行一些任务 然后卸载了它 因为它让我感到困惑 所有亮点和快速链接 我更喜欢 Visual Studio 的默认行为 卸载后 以前用红线下划线的编译错误现在根本没有下划线了 如何使用默认行为重置 Visual
  • 当计数为 1 时,有条件地将 T 从 Rc 移出

    有没有办法将物体从Rc