拥有值的一般方法(不指定“Rc”或“Box”)

2023-12-05

一般来说,当您不想指定时,是否有一个针对拥有值的枚举/特征how确切地说,该值是拥有的(无论共享与否),但您只想拥有它。
我需要将对闭包的引用存储在结构中,这意味着它们必须与结构一样存在。当然,我无法复制它们,因此它们需要作为参考。但我不想做出限制,因此结构的用户应该能够选择他们想要如何转移所有权。
当您无法复制值或它们非常大时,这是一个普遍问题。

非常一般的例子,我正在寻找的是这个Owned<T>

struct Holder<T> {
    value: Owned<T>,
}

...

let rc = Rc::new(variable);
let holder = Holder::new(rc.clone());
let holder2 = Holder::new(Box::new(variable2));

这种类型的一个非常简单的“实现”的例子是:

enum Owned<T> {
     Unique(Box<T>),
     Shared(Rc<T>),
}

我希望我能解释我的意思。


我想你可能会对“拥有”这个词感到有点困惑,这在 Rust 中是可以理解的!每个价值都属于某物,但有时价值指的是不属于你的东西。

就您而言,您只需要接受T. Then Holder将拥有T:

use std::rc::Rc;

struct Holder<T> {
    value: T,
}

impl<T> Holder<T> {
    fn new(v: T) -> Holder<T> {
        Holder { value: v }
    }
}

fn main() {
    let variable = "Hello world".to_owned();
    let variable2 = "Hello moon".to_owned();

    let rc = Rc::new(variable);
    let holder = Holder::new(rc.clone());
    let holder2 = Holder::new(Box::new(variable2));
}

即使您传递了对Holder,它将拥有参考资料。然而,它不会拥有所提及的项目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

拥有值的一般方法(不指定“Rc”或“Box”) 的相关文章

随机推荐

  • DDD - 实体不能直接访问存储库的规则

    在领域驱动设计中 似乎有lots of 协议实体不应直接访问存储库 这是来自埃里克 埃文斯吗领域驱动设计书上的 还是从别的地方来的 对于其背后的推理 哪里有一些好的解释 编辑 澄清一下 我不是在谈论将数据访问与业务逻辑分离到单独层的经典 O
  • 如何在改造Android中发送对象数组?

    我有一个要在服务调用中传递的以下对象数组 ParkingSpace sid WorldSensing vhu6lom3sovk6ahpogebfewk5kqadvs4 5385fc250cf2497dfe5679d1 ParkingSpac
  • CakePHP 3.0 没有 intl 扩展就无法运行

    我正在尝试在共享主机上安装并运行 CakePHP 3 0 项目 然而 CakePHP 3 0 需要php intl扩展 但托管提供商拒绝我安装 启用intl共享主机上的扩展 我怎样才能运行 CakePHP 3 0 而不intl扩大 有没有办
  • NetBeans。禁用错误检查下划线

    如何在 NetBeans 6 9 1 中禁用错误 检查 源代码中出现红线是很烦人的 这类似于NetBeans 关闭 红色波浪下划线 如何 但我想完全禁用下划线 而不仅仅是在打字时 它错误地解析 PHP 源并忽略语法错误 Netbeans 有
  • 比较 Python Pandas DataFrame 的匹配行

    我有这个数据框 df1 在熊猫中 df1 pd DataFrame np random rand 10 4 columns list ABCD print df1 A B C D 0 860379 0 726956 0 394529 0 8
  • SSL 错误/RSA 预主密钥错误

    有人知道 PayPal 沙箱中遇到的错误是什么问题吗 上次运行良好几个月 我们更换了服务器 IPN 停止运行 我们不确定是 PayPal 问题还是我们的问题 在 Web 服务器访问日志中 没有显示 PayPal IPN POST 日志条目
  • 将 MultiLabelDataset 转换为 Guava Multimap 以进行打印/检查

    我正在使用以下程序 public static void main String args throws Exception String input args 0 InputStream is new BufferedInputStrea
  • 局部变量需要声明为final

    我收到错误 局部变量框是从内部类内部访问的 需要声明为最终的 这看起来不错 但我真的不认为这是最好的解决方案 所以我希望其他人可以帮助我 这是我的代码 public void showPublisherBox JComboBox box i
  • 提供 cin 输入的默认值

    我的应用程序使用读取用户输入std cin溪流 在一个地方 我想提供默认输入并让用户按原样接受它 通过按 Enter 键 或在继续之前修改它 通过使用退格键删除旧字符并添加新文本 我知道字符可以直接放入cin rdbuf 但这并不是我想要实
  • window.outerWidth VS $(window).outerWidth()

    我只是好奇两者之间有什么区别window outerWidth and window outerWidth 是 如果有的话 我在谷歌上找不到太多关于这方面的信息 所以我想我会吸引大众 这只是一个一般性问题 而不是一个具体问题 Jquery的
  • 选择不包含某些特定类的 :first-child 或 :last-child

    假设我们有一个包含 5 个项目的列表 并且我们想要应用一些具体款式到第一个或最后一个孩子 但是这个列表的功能需要通过 jQuery 应用一个类 我们称之为 hide 这将设置一个display none 关于目标项目 The 具体款式我一开
  • 从使用 dlopen 加载的共享库引用全局符号

    我有一个共享库 我想从主程序访问符号 例如 main c include
  • 如何删除

    标签顶部的空间/将包含的文本与容器顶部对齐?

    这无疑是一个愚蠢的问题 但我今天过得很糟糕 这让我很困惑 如果您查看http jsfiddle net E6kGP 1 然后您可以看到两个相邻的简单 div 每个 div 都包含一个 p 标签 每个标签具有不同的字体大小和匹配的行高 p 容
  • org.apache.hadoop.mapreduce.counters.LimitExceededException:计数器太多:121 max=120

    我正在运行一个 hadoop 作业 来自 oozie 它有很少的计数器和多输出 我收到如下错误 org apache hadoop mapreduce counters LimitExceededException 计数器太多 121 ma
  • 网络服务器的实现[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我想用纯 Java 实现我自己的网络服务器 Web 服务器应该仅支持静态资源 即 html js css 图片 电影等 您能推荐一个关于如何实现这样
  • 无法在字段值中使用 1(int 类型)作为 *int 类型

    为什么会产生错误 一样的int除了 with 指针 type Gim struct Active int yesVar Gim Active 1 error Cannot use 1 type int as type int in fiel
  • 如何在c中实现定时器?

    我们想在Linux平台下的C程序中添加一个定时器 我们正在尝试发送数据包 并且希望了解 1 分钟内发送了多少数据包 我们希望计时器与while正在执行发送数据包的循环 例如 while 1 send packets 该循环将继续发送数据包
  • Angular2 中使用 Angular-CLI 的环境特定服务端点

    我正在为我的 Angular2 项目使用 Angular CLI 我通过 angular2 服务调用后端 ajax 服务 我对于不同的任务有不同的服务端点 URL 我想让这些服务环境变得有意义 假设我有两个服务 客户服务 https loc
  • Boost Spirit 可选解析器和回溯

    为什么这个解析器离开 b 在属性中 即使选项不匹配 using namespace boost spirit qi std string str abc auto a char a auto b char b qi rule
  • 拥有值的一般方法(不指定“Rc”或“Box”)

    一般来说 当您不想指定时 是否有一个针对拥有值的枚举 特征how确切地说 该值是拥有的 无论共享与否 但您只想拥有它 我需要将对闭包的引用存储在结构中 这意味着它们必须与结构一样存在 当然 我无法复制它们 因此它们需要作为参考 但我不想做出