如何从单个元素创建切片而不复制该元素?

2024-06-25

我有一个非常大的结构(在堆上和堆栈上),我在函数中使用。大多数时候,我想要该结构的一个简单变量,因为我直接对大结构进行操作。然而,在某一时刻,我被迫(通过函数签名)将此结构传递到切片内部。

struct VeryBig(Vec<String>, [u64; 50]);

fn takes_slice(_: &[VeryBig]) {}

fn main() {
    let foo = VeryBig(vec!["Ferris".to_string(); 100], [27; 50]);

    // Use `foo` directly a bunch of times

    takes_slice(&foo); // <-- mismatched type

    // Use `foo` directly a bunch of times
}

这显然并且可以理解地导致了这个错误:

error[E0308]: mismatched types
  --> src/main.rs:10:17
   |
10 |     takes_slice(&foo); // <-- mismatched type
   |                 ^^^^ expected slice, found struct `VeryBig`
   |
   = note: expected type `&[VeryBig]`
              found type `&VeryBig`

所以我想知道:解决这个问题的最佳方法是什么?我could只是做foo a [VeryBig; 1],但这意味着我必须使用foo[0]在我想直接使用大结构的任何地方——烦人。或者,我可以暂时将大结构放入数组中,调用takes_slice并再次将其移出数组。但这也不太好。

据我所知,&T and &[T]应该具有相同的内存布局(受指点,而不是指针),所以我希望有一种方法可以轻松地将一个重新解释为另一个,但我还没有找到这样的功能。


您可以使用slice::from_ref https://doc.rust-lang.org/stable/std/slice/fn.from_ref.html.

fn from_ref<T>(s: &T) -> &[T]

在你的代码中():

use std::slice;

takes_slice(slice::from_ref(&foo));

对于可变切片,您可以使用slice::from_mut https://doc.rust-lang.org/stable/std/slice/fn.from_mut.html。另请参阅这个问题 https://stackoverflow.com/questions/32939974/can-i-create-a-slice-of-a-single-byte-u8关于那个话题。

See 如何将对任意类型的引用转换为对长度为 1 的数组的引用? https://stackoverflow.com/q/68564481/155423对于数组。

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

如何从单个元素创建切片而不复制该元素? 的相关文章

随机推荐

  • 姜戈。登录表单的错误消息

    我制作登录名 密码表格 model class LoginForm forms Form username forms CharField max length 100 password forms CharField widget for
  • 计算序列 1,3,8,22,60,164,448,1224... 的第 n 项? [复制]

    这个问题在这里已经有答案了 可能的重复 我想以 Order 1 或 nlogn 的顺序生成序列 1 3 8 22 60 164 的第 n 项 https stackoverflow com questions 11301992 i want
  • 连接暂停后 GoogleApiClient 重新连接策略是什么?

    GoogleApiClient 的模糊 javadoc 告诉我们 GoogleApiClient ConnectionCallbacks onConnectionSuspended 将是 当客户端暂时处于断开连接状态时调用 如果远程服务出现
  • 如何使用 webpack 2 分离 css 文件中的 less 文件?

    我可以编译页面上的 less通过 webpack2 但我无法将 less 文件编译成 CSS 文件 webpack config js var path require path var webpack require webpack va
  • 如何使用c在Linux中获取当前时间戳(以纳秒为单位)

    我知道我们可以使用clock gettime CLOCK MONOTONIC 我尝试问的问题是 如果我需要以纳秒为单位的时间 从时代来看 这将是一个巨大的数字 例如 自纪元以来的秒数是13438461673 so 13438461673 1
  • React Native动态webview高度

    我有 WebView 内容 它根据内容量改变它的高度 所以我找到了一种方法 如何通过document title属性onNavigationStateChange来获取内容的高度 看起来像这样 let html 以及 onNavigatio
  • 如何在 Visual Studio Code 中打开“launch.json”文件?

    我是一名刚开始学习 Python 的新程序员 但有一些事情困扰着我 我想改变它 正如我所见 执行代码时可以从终端删除不需要的路径 我不知道如何访问 Visual Studio Code启动 json文件和谷歌上的所有解释都相当混乱 请注意
  • Swift3 中的数组排序

    在我的代码中 我有一个如下所示的结构 struct Object var name String var count Int 我现在正在创建一个包含 10 个对象的数组 这些对象具有随机名称和随机计数 有没有一个简单的方法a 按字母顺序对它
  • SubSonic 3.0.0.3 更新异常

    当我尝试在 SubSonic 中更新时 我遇到了空引用异常 这是我收到的异常消息 未将对象引用设置为对象的实例 StackTrace 位于 SubSonic Query Update GetCommand 我已经检查了正在更新的对象 没有丢
  • 查找成对元素的索引

    给定目标 b a 和输入 x0 b a z z x1 b a z z x2 z z a a x3 z b a a 目的是找到连续的位置 b a 元素并获取输出 gt gt gt find ba x0 0 gt gt gt find ba x
  • 如何配置maven以使用servlet 3

    我想升级我的 web 应用程序以使用 servlet 3 0 插入 2 5 我正在使用 WebLogic Server 版本 12 1 1 0 12c maven java 7 10 和 NetBeans 7 3 1 由于某种原因 唯一可用
  • 在Python中检测包含非英文字符的字符串

    我有一些混合有英文字母和非英文字母的字符串 例如 w 1991 2 如何使用正则表达式或 Python 中的任何其他快速方法识别这些类型的字符串 我不喜欢将字符串中的字母与字母列表进行逐一比较 而是一次性快速完成此操作 您可以检查该字符串是
  • 绘图不适合 R 窗口

    我正在使用metaR 中的包对比例进行荟萃分析 我的分析中有大约一百项研究 当我打字时forest result 创建我的森林图 它可以工作 但图形在顶部和底部被切掉 无论我做什么 它都不适合绘图窗口 我对如何解决这个问题感到困惑 有任何想
  • 零膨胀泊松分布的经验和理论分布图

    以下是我正在研究的一种数据集 data lt c 0 1 0 11 2 0 3 0 0 2 1 3 1 0 1 0 0 0 2 3 0 0 0 8 1 1 1 0 1 1 2 7 0 0 0 5 2 3 6 1 1 5 2 9 0 0 1
  • 失去焦点时隐藏软键盘

    当我们有一个EditText并且它失去了焦点 到不需要键盘的元素 软键盘应该自动隐藏还是我们应该自己隐藏它 我正在将焦点从AutoCompleteSearchView 它的行为应该像EditText我猜 到Button requestFoc
  • Powershell:对 Select-Object 中的字段使用变量

    我正在构建一个正在创建的脚本csv文件 每个csv有一组不同的字段 一切都很好 但我想控制列顺序输出 我有一个变量 其中包含字段以及我想要的字段顺序 我知道我可以使用 Select Object 来控制它 我想做的是这样的 Fields I
  • 使用自定义令牌进行 Firebase 身份验证

    我有一个 firebase 项目 我试图从我的 Rails 服务器进行身份验证 按照文档上的说明使用 ruby jwt 库创建自定义令牌 但我不断收到相同的错误 auth invalid custom token 自定义令牌格式不正确 请检
  • 对于向 XSS 漏洞开放 JWT,我应该有多担心?

    我正在构建一个 Node js Web 应用程序 该应用程序使用用于 GUI 的 React 和由 Apollo 提供的 graphQL 用于连接到 AWS 上的 RDS MySQL 实例的后端 我正在对用户进行身份验证 然后返回 JWT
  • 如何使用 Rx 以非阻塞方式观察值?

    我试图在计时器上观察其处理程序比间隔长 为了做到这一点 我想安排对某种线程池 任务池或其他东西的观察 我尝试了线程池 任务池和newthread 但没有一个起作用 有谁知道该怎么做 例子 var disposable Observable
  • 如何从单个元素创建切片而不复制该元素?

    我有一个非常大的结构 在堆上和堆栈上 我在函数中使用 大多数时候 我想要该结构的一个简单变量 因为我直接对大结构进行操作 然而 在某一时刻 我被迫 通过函数签名 将此结构传递到切片内部 struct VeryBig Vec