为什么我不能编写与 Box::new 类型相同的函数?

2024-02-21

如果我编写一个接受一个类型参数的函数[f32](相对于例如&[f32]),我得到一个错误:

the trait bound `[f32]: std::marker::Sized` is not satisfied

文档说这是因为[f32]没有编译时已知的大小。合理的限制。很公平。

然而,标准库中至少有一个函数属于这种类型。我这样称呼它:

let b: Box<[f32]> = Box::new([1.0, 2.0, 3.0]);

为什么标准库允许这样做,而不是我的代码?相关的区别是什么? (没有明显的魔法来源 https://doc.rust-lang.org/src/alloc/up/src/liballoc/boxed.rs.html#225-236).


[f32]未调整大小。然而,[1.0, 2.0, 3.0]大小...其类型是[f32; 3].

就是这样T当使用标准库代码编译时,[f32; 3]大小的数组。

要自己接受指定大小的数组,您可以执行相同的操作:

fn my_func(array: [f32; 3]) {
    // Implementation here
}

my_func([1.0, 0.0, 0.0]);

在操场上

An &[f32]切片的大小也......这就是为什么它也被允许。

正如卢卡斯在评论中指出的那样,切片是一个“胖指针”(您可以在 Nomicon 中阅读有关动态大小类型的信息 https://doc.rust-lang.org/nomicon/exotic-sizes.html)。切片胖指针由一个指向一段数据的指针和一个表示该数据有多大的值组成。

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

为什么我不能编写与 Box::new 类型相同的函数? 的相关文章

随机推荐

  • 动画元素替换[重复]

    这个问题在这里已经有答案了 请告诉我如何使容器根据子元素的高度平滑地增加和减少高度 我的代码可以在没有动画的情况下工作 setTimeout gt document getElementById page1 style display no
  • Selendroid 作为网络抓取工具

    我打算创建一个 Android 应用程序 该应用程序执行无头登录到网站 然后从后续页面中抓取一些内容 同时维护登录会话 我第一次使用HtmlUnit http htmlunit sourceforge net 在一个普通的 Java 项目中
  • 在 SQL 中,UPDATE 总是比 DELETE+INSERT 快吗?

    假设我有一个简单的表 其中包含以下字段 ID int 自增 身份 主键 名称 varchar 50 唯一 有唯一索引 Tag int 我从不使用 ID 字段进行查找 因为我的应用程序始终基于使用 Name 字段 我需要不时更改标签值 我正在
  • 检查字符串是否是从子字符串列表构建的算法

    给你一个字符串和一个字符串数组 如何快速检查该字符串是否可以通过连接数组中的某些字符串来构建 这是一个理论问题 出于实际原因我不需要它 但我想知道是否有一些好的算法 EDIT阅读一些答案我注意到 这可能是 NP 完全问题 即使找到字符串的子
  • 缓存 JSON:Apache、PHP、jQuery

    我正在尝试缓存由数据库中的 php 脚本生成的 JSON 内容 然而 数据集非常稳定 几乎没有变化或添加 这意味着数据可能会持续数周保持不变 问题是它包含一个 LOB 列 并且加载时间很长 与从文本文件提供 json 相比要长 这意味着 g
  • MSExchange URL 编码

    我正在编写一个 PHP 服务来通过 WebDAV 查询 Exchange 服务器 该服务已经上线大约一个月 没有出现任何问题 但今天遇到了一些问题 因为邮箱中收到了一封具有以下主题行的电子邮件 FW 每日审批报告 供应商 主 007297
  • SessionNotCreatedError: 会话未创建: 此版本的 ChromeDriver 仅支持 Chrome 版本 97 当前浏览器版本为 100.0.4896.75

    我正在尝试启动 selenium webdriver 实例 但出现此错误 SessionNotCreatedError session not created This version of ChromeDriver only suppor
  • 属性错误:“NoneType”对象没有属性“parent”

    from urllib request import urlopen from bs4 import BeautifulSoup html urlopen http www pythonscraping com pages page3 ht
  • 可以使用其他编程语言(python/C#)中的 Mathematica 吗?

    是否可以使用其他语言的 Mathematica 计算能力 我需要执行一些复杂的操作 顺便说一句 不一定是符号操作 如果能够直接从我的 python c 程序调用 Mathematica 的函数或运行 Mathematica 的代码 那就太好
  • 如何在rails 3.2.1中使用link_to和ajax

    我在用着轨道3 2 1 如何将 link to 与 remote gt true 一起使用 我在控制器中的方法 def clickme clk you click me respond to do format format js rend
  • Spring Boot 2 - 更改 Jar 名称

    我在 Gradle 项目中使用 Spring Boot 2 在 Jenkins 中构建 jar 我想更改该 jar 文件的名称 默认情况下 Spring Boot 2 使用 Gradle 属性rootProject name 可以在 set
  • 等待 JUnit 测试用例中测试的代码生成的所有线程

    如何确保在 JUnit 测试用例中 由被测方法直接 间接生成的所有线程都已完成该作业 以便我可以断言最终结果 Test public void testMethod Result result method may spawn multip
  • EF Composite 关键流畅 API

    我正在尝试映射实体的复合键 public class Customer public int CustomerId get set public virtual List
  • write() 参数必须是 str,而不是字节 [重复]

    这个问题在这里已经有答案了 我是一名初学者程序员 正在阅读 Python 初学者 一书 我在尝试为问答游戏编写高分函数时遇到了一个问题 当调用函数 highscore user highscore 时 我尝试相应地分配参数 以便我可以将信息
  • 获取 keyvault 的访问令牌

    我在本地发布了一个 Web 应用程序并将其连接到 IIS 当我尝试导航到该网站时 它在启动时失败 并在尝试访问该网站时出现以下错误keyvault 应用程序启动异常 Microsoft Azure Services AppAuthentic
  • 如何通过 Bootstrap 选项卡使用 AJAX 加载?

    我使用了 bootstrap tabs js 并且它运行得很好 但我没有找到有关如何通过AJAX请求加载内容的信息 那么 如何通过 bootstrap tabs js 使用 AJAX 加载呢 在 Bootstrap 2 0 及更高版本中 您
  • 如何通过网络驱动器快速获取 .csv 文件的最后一行?

    我存储了数千个时间序列 csv网络驱动器上的文件 在更新文件之前 我首先获取文件的最后一行以查看时间戳 然后使用该时间戳之后的数据进行更新 如何快速获取最后一行 csv文件通过网络驱动器 这样我就不必加载整个巨大的 csv文件只使用最后一行
  • 什么是获得颜色以使图像上的文本突出的好算法?

    例如下图 背景是一张照片 照片中央有一个 伊涅斯塔 这个人物 但由于颜色不好 字符有些难以阅读 有没有什么好的算法可以获取颜色以使图像上的字符突出 您可以使用以下技巧 而不是制作矩形背景 确实看起来不太好 选择两种对比色 例如白色和黑色 使
  • 使用php获取两个日期之间的总时间差[重复]

    这个问题在这里已经有答案了 可能的重复 如何使用 PHP 计算两个日期之间的差异 https stackoverflow com questions 676824 how to calculate the difference betwee
  • 为什么我不能编写与 Box::new 类型相同的函数?

    如果我编写一个接受一个类型参数的函数 f32 相对于例如 f32 我得到一个错误 the trait bound f32 std marker Sized is not satisfied 文档说这是因为 f32 没有编译时已知的大小 合理