切片和数组有什么区别?

2023-12-15

为什么两者都是&[u8] and &[u8; 3]在这个例子中好吗?

fn main() {
    let x: &[u8] = &[1u8, 2, 3];
    println!("{:?}", x);

    let y: &[u8; 3] = &[1u8, 2, 3];
    println!("{:?}", y);
}

事实是&[T; n]可以强迫&[T]这是让他们可以忍受的方面。— 克里斯·摩根

Why can &[T; n]强迫&[T]?在什么其他情况下会发生这种强制?


[T; n]是一个长度数组n,表示为n邻近的T实例。

&[T; n]纯粹是对该数组的引用,表示为指向数据的瘦指针。

[T]是一个切片,一个未调整大小的类型;它只能通过某种形式的间接使用。

&[T],称为切片,是一种大小类型。它是胖指针,表示为指向第一项的指针和切片的长度。

因此,数组的长度在编译时就已知,而切片长度是运行时的问题。目前,数组在 Rust 中是二等公民,因为不可能形成数组泛型。有各种特征的手动实现[T; 0], [T; 1], &c.,通常最多 32 个;由于这个限制,切片的用途更加广泛。事实是&[T; n]可以强迫&[T]这是让他们可以忍受的方面。

有一个实现fmt::Debug for [T; 3] where T实施Debug,另一个为&T where T实施fmt::Debug,所以如u8实施Debug, &[u8; 3]也是如此。

Why can &[T; n]强迫&[T]?在 Rust 中,强制什么时候发生?

它会在需要时进行强制,而不会在其他时候进行。我能想到两种情况:

  1. 当某事期望&[T]你给它一个&[T; n]它会默默地强迫;
  2. 你打电话时x.starts_with(…) on a [T; n]它将观察到没有这样的方法[T; n],所以 autoref 开始发挥作用,它尝试&[T; n],这没有帮助,然后强制开始发挥作用,它会尝试&[T],它有一个名为starts_with.

片段[1, 2, 3].starts_with(&[1, 2])展示了两者。

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

切片和数组有什么区别? 的相关文章

  • c中的数组名到底是什么?

    我很难理解 C 中数组名称的类型和使用 这可能看起来很长 但请耐心等待 我理解以下声明声明a属于类型int i e 整数数组 int a 30 While a还指向数组的第一个元素以及诸如此类的东西 a 2 是有效的 因此 使得a看起来像一
  • 为什么数组索引或基索引以 0 开头?

    在使用任何语言处理数组时 我一直想知道为什么数组的基地址或索引号以零开头 int x 5 21 34 55 314 45 现在 如果我想访问数组的任何第一个值 我将不得不使用x 0 但是为什么 0 这背后有什么逻辑呢 在 C 语言中 数组的
  • Array.indexOf 如何比 Array.some 更高效

    这个问题的灵感来自于这个问题的竞争答案 具有多个参数的indexOf https stackoverflow com questions 39000151 indexof with multiple arguments 用户想知道一种有效的
  • 保存和恢复陷阱状态?管理多个陷阱处理程序的简单方法?

    有什么好的方法可以覆盖bash陷阱处理程序不会永久破坏可能已设置或尚未设置的现有处理程序 动态管理任意陷阱例程链怎么样 有没有办法保存陷阱处理程序的当前状态 以便以后可以恢复 在 Bash 中保存和恢复陷阱处理程序状态 我将提交以下堆栈实现
  • 如何连接/组合两个数组以连接成一个数组?

    我正在尝试将 JavaScript 中的 2 个数组合并为一个 var lines new Array a b c lines new Array d e f 这是一个简单的例子 我希望能够将它们组合起来 这样当读取第二行时 数组中的第四个
  • Julia:将数组数组转换为二维数组

    我有一个数组d包含一个浮点数组 julia gt d 99 element Array Array Float64 1 1 我正在尝试将其转换为二维数组 并且我成功地实现了我的目标 data Array Float64 length d l
  • 将数组数据从 html 表单传递到 php 数组变量

    我有一张表格来记录一组项目的工作时间 该表单使用项目 ID 小时数和注释字段的数组 表单行是项目数量的循环 该表单将数据传递给 PHP 脚本进行处理 PHP 脚本没有看到数组中的值 它只是给我 Array 作为输出 文档和其他示例让我想知道
  • 从文件中读取未知长度的int数组

    如何从文件中读取未知长度的整数数组 我没有找到获取数组大小的方法 所以我尝试了一些临时字符串的东西 但我的代码爆炸了 有更好的想法吗 Use std vector std ifstream inFile fileName std vecto
  • 将字节数组转换为托管结构

    更新 这个问题的答案帮助我编写了开源项目GitHub 上的 AlicanC 现代战争 2 工具 https github com AlicanC AlicanC s Modern Warfare 2 Tool 你可以看到我是如何阅读这些数据
  • 如何在 WSL 上构建使用 device_query crate 的项目?

    我正在尝试使用以下命令跟踪在 WSL 中键入了哪些键设备查询 https crates io crates device query箱 我已经阅读了板条箱的文档 添加了device query 0 2 4 到我的 Cargo toml 文件
  • 使用 VBA 通过简单命令从非连续范围的并集获取值到数组中(无循环)

    我有以下任务 表面上很简单 使用 VBA 将电子表格上多个列的值复制到二维数组中 为了让生活更有趣 这些柱子并不相邻 但它们的长度都相同 显然 可以通过依次循环每个元素来做到这一点 但这看起来非常不优雅 我希望有一个更紧凑的解决方案 但我很
  • PHP中的反转数组

    array 7 0 gt array 2 id gt string 1 9 roi gt float 0 1 gt array 2 id gt string 1 1 roi gt float 0 2 gt array 2 id gt str
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 二维数组的 MPI 数据类型

    我需要将一个整数数组的数组 基本上是一个二维数组 从根传递给所有处理器 我在 C 程序中使用 MPI 如何声明二维数组的 MPI 数据类型以及如何发送消息 我应该使用广播还是分散 你需要使用播送 http www netlib org ut
  • 矩阵到数组 C#

    这将是转换方阵的最有效方法 例如 1 2 3 4 5 6 7 8 9 into 1 2 3 4 5 6 7 8 9 in c 我在做 int array2D new int 1 2 3 4 5 6 7 8 9 int array1D new
  • 如何使用 Perl 分割文本文件并将其存储到二维数组中?

    230215 01 16 2000 57533 0 1045403 0 0 217623 230215 01 18 2000 77659 0 1045403 0 0 217624 230215 01 25 2000 76583 0 1045
  • 我可以将参数作为数组传递吗?

    例如 而不是 assert eq add 2 3 5 有什么方法可以调用类似的东西 let params u32 2 2 3 assert eq call add params 5 我发现这个功能对于测试非常有用 例如 如果我想为需要大量参
  • 对象数组的数组(二维数组)JNI

    我正在努力创建自定义对象类型 ShareStruct 的二维数组 jobjectArray ret jobjectArray ins jobjectArray outs jclass myClass env gt FindClass env
  • F# 中的数组初始化

    如何根据给定的记录类型在 F 中创建和初始化数组 假设我想创建一个包含 100 个 record1 记录的数组 e g type record1 value1 string value2 string let myArray Array i
  • 如何为命令 stdout 添加 [stdout] 和 [stderr] 前缀?

    使用命令结构 https doc rust lang org std process struct Command html 如何向 stdout 和 stderr 缓冲区添加前缀 我希望输出看起来像这样 stdout things are

随机推荐

  • 无法在centOS中运行sshpass命令[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 正在研究 CentOS 6 3 最终版 系统 并尝试使用 ssh 另一台机器sshpass实用程序喜欢 sshpass p password ssh user host 但它给了我这
  • 通过 Random.Next() 排序

    In 这个问题其中一个建议是通过 Random Next 对列表进行排序 我认为 也许是错误的 他是在建议这个 public static IEnumerable
  • 如果我使用 Mockito,我还需要 Guice 吗?

    我一直在学习依赖注入 例如 Guice 在我看来 主要驱动因素之一 可测试性 已经被 Mocking 例如 Mockito 很好地涵盖了 依赖注入和模拟框架之间的区别 Ninject vs RhinoMock 或 Moq 是对依赖注入和 M
  • 在JSSOR中,如何通过Javascript访问当前标题?

    我想将 JSSOR 幻灯片中的值传递到 DOM 的其他部分 Markup div class slide img src bilder bild2 jpg div class caption p Caption text p div div
  • 在构建 Android 应用程序之前,将 jar 从其他目录拉到 libs 文件夹

    我有一个 Android 项目 它依赖于外部 jar 文件 即A jar 我已经配置了我的安卓build gradle首先构建构建的项目A jar 然后 Android 构建将继续 jar 构建后 将 jar 从其构建文件夹复制到 andr
  • FireFox 警告“未知伪类或伪元素‘隐藏’”不断运行

    我最近发现 Firefox 中出现一个警告 Warning 未知的伪类或伪元素 隐藏 这是页面http eleven23 net eleven23 beta work web lounge22 php 当到达具有 img hidden 的
  • 为什么反汇编后的数据会变成指令?

    我需要一些帮助来理解此时此刻发生的事情 这段代码 发生 jmp Begin 我只知道 com 文件可以是 64kb 因此您希望将所有内容放在一个段中 如果你想放置变量 你需要jmp 但是当我搜索它时 很多指南只是在评论中说 jmp Begi
  • 在 PHP 中检测移动设备的最简单方法

    判断用户是否使用移动设备使用 PHP 浏览我的网站的最简单方法是什么 我遇到过很多可以使用的类 但我希望有一个简单的 if 条件 我有办法做到这一点吗 这是一个来源 检测移动浏览器 下载 PHP 脚本 Code
  • Fortran 中是否有用于将数组初始化为零的内在函数?

    在 Fortran 中是否有办法将数组 向量 矩阵 甚至标量 设置为零 2003 2008 似乎将 Fortran 提升到了一个非常现代的水平 我想知道它们是否包含了一种简单的方法来将数组值设置为零 而无需执行以下操作 do i 1 X d
  • 显然你可以修改 const 值而无需 UB。或者你可以吗?

    开始编辑 用户 user17732522指出调用UB的缺陷来自事实pop back 使根据使用的参考资料无效vector库文档 当发生这种情况时 不需要 constexpr 求值来检测它 因为它不是 C 核心的一部分 然而 user1773
  • Android 的“onActivityResult”机制不起作用

    我在一个简单的应用程序中遇到了一个大而令人沮丧的问题 我有两个活动 A 和 B 活动 A 通过单击按钮打开活动 B 活动 B 有两个 结束 如果用户单击 B Back 如果刚刚完成 并返回到 A 如果用户单击 B OK 按钮 则活动 B 完
  • 为什么 Python 字符串是不可变的?使用它们的最佳实践

    让Python字符串不可变的设计原因是什么 它如何让编程变得更容易 我习惯了可变字符串 比如 C 中的字符串 如果没有可变字符串 我该如何编程呢 有没有最佳实践 当您收到字符串时 您将确保它保持不变 假设您要构造一个Foo如下带有字符串参数
  • 在 Silverlight 中将 XML 动态绑定到 DataGrid

    我一直在尝试在 Silverlight 特别是 Silverlight 4 但 SL3 中的任何解决方案也可以 中将 XML 通过 XElement 动态绑定到 DataGrid 但一直无法做到这一点 我希望动态地执行此操作 即 没有严格的
  • RewriteRule 无法编译正则表达式

    我以前的服务器工作正常 今天我更换了新服务器 并且 RewriteRule 无法在我的 htaccess 上编译正则表达式 如何修复这条线 RewriteRule category 0 9 category php pid 1 catnam
  • 你可以将 UITabBarController 推入 UINavigationController 中吗

    是否无法将 UITabBarController 推入 UINavigationController 中 我在旧版本的 iOS 中读过 但现在情况仍然如此吗 简而言之 是的 你可以 但仅仅因为你可以 并不意味着你应该这样做 这UITabBa
  • Django 中的导航

    我刚刚在 django 中完成了我的第一个小 web 应用程序 我喜欢它 我即将开始将旧的 PHP 生产站点转换为 django 作为其模板的一部分 有一个导航栏 在 PHP 中 我在模板代码中根据当前 URL 检查每个导航选项的 URL
  • 按时间或运行总和进行缓冲以进行反应式扩展

    我对反应式扩展相当陌生 想要根据时间缓冲流 或者根据不超过阈值的运行总和 每个项目的大小由 lambda 指定 以先发生者为准 就像现有的Buffer按计数或时间 目前我已经编写了自己的实现Buffer方法按预期工作 使用ISchedule
  • 使用 .htaccess 附加参数

    我正在努力处理 htaccess 重写命令 我拥有的是 RewriteCond HTTP HOST www mywebsite co uk RewriteCond REQUEST URI subfolder RewriteRule subf
  • D3.js:根据值更改条的颜色[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我一直在尝试 d3 js 条形图 我想根据 y 轴的值更改颜色 如何实现这一点 我尝试添加线性渐变 但后来我失去了对它的控制 我正在编写的代码基于此 http bost ocks
  • 切片和数组有什么区别?

    为什么两者都是 u8 and u8 3 在这个例子中好吗 fn main let x u8 1u8 2 3 println x let y u8 3 1u8 2 3 println y 事实是 T n 可以强迫 T 这是让他们可以忍受的方面