我可以将 Must_use 应用于函数结果吗?

2023-11-26

我有一个函数返回一个f64。我想确保使用该函数的输出,而不是仅仅忽略它。有什么办法可以做到这一点吗?

返回类型不用于错误处理,因此将其包装在Result or Option确实没有意义。

我想要类似的东西:

#[must_use]
fn calculate_the_thing(number: f64) -> f64 {
    number * 2.0
}

自 Rust 1.27 起#[must_use] 属性可以用在函数上

#[must_use]
fn calculate_the_thing(number: f64) -> f64 {
    number * 2.0
}

fn main() {
    calculate_the_thing(4); // warning: unused return value of `calculate_the_thing ` which must be used

    let _ = calculate_the_thing(4); // (no warning)
}

在旧版本中,#[must_use]仅适用于类型,不适用于单个值。

一种替代方法是定义一个简单的包装类型#[must_use]:

#[must_use = "this value should be used (extract with .0)"]
pub struct MustUse<T>(pub T);

然后你的函数可以返回MustUse<f64>,如果用户写入,则会收到警告calculate_the_thing(12.3),甚至建议获得他们想要的东西的正确方法:let x = calculate_the_thing(12.3).0;. 例如:

fn calculate_the_thing(number: f64) -> MustUse<f64> {
    MustUse(number * 2.0)
}

fn main() {
    calculate_the_thing(12.3); // whoops
    
    let x = calculate_the_thing(12.3).0;
    println!("{}", x);
}
warning: unused `MustUse` which must be used: this value should be used (extract with .0)
 --> src/main.rs:9:5
  |
9 |     calculate_the_thing(12.3); // whoops
  |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
  |
  = note: #[warn(unused_must_use)] on by default
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以将 Must_use 应用于函数结果吗? 的相关文章

随机推荐

  • 如何使用 SqlResultSetMapping 将 JPA NativeQuery 的结果集映射到 POJO

    我正在尝试使用 SqlResultSetMapping 和 ConstructorResult 将本机查询的结果映射到 POJO 这是我的代码 SqlResultSetMapping name foo classes Constructor
  • C++ 中的“using”关键字

    我正在学习C 我的教授使用了一些类似的代码 using filePath std string using setOfPaths std set
  • C++ 移动赋值可防止复制交换习惯用法

    在 C 中 复制交换惯用法通常是这样实现的 C operator C rhs swap this rhs return this 现在 如果我想添加一个移动赋值运算符 它应该如下所示 C operator C rhs swap this r
  • 使用 AutoMapper 将 IList 映射到 (Iesi.Collections.Generic) ISet

    我已经尝试解决这个问题一天了 但一无所获 所以我希望有人可能已经解决了这个问题 我找到的最接近解决方案是如何使用 AutoMapper 简单地将 NHibernate ISet 映射到 IList and 通过 AutoMapper 将 I
  • jquery animate 用于元素属性而不是样式

    ASAIK jquery animate 函数仅接受样式属性 但我想为元素的属性设置动画 考虑一个 SVG 元素矩形
  • Django/Python 初学者:执行 python manage.pysyncdb 时出错 - psycopg2 未找到

    我使用 Macports 安装了 Pythong2 6 psycopg2 和 pgAdmin3 我的settings py是 DATABASE ENGINE postgresql psycopg2 postgresql psycopg2 p
  • Rust 借用了指针和生命周期

    在我的代码中 我有一个相互递归的树结构 如下所示 enum Child lt r gt A r Node lt r gt B C struct Node lt r gt children r Child lt r gt 25 impl lt
  • 如何从 GIF 动画中获取长度(时间)

    有没有办法知道单循环 GIF 动画需要多长时间才能完成 好吧 具体细节取决于您使用什么接口来操作这些动画 GIF 我不知道本机 Java AWT Swing 中是否有真正流畅的方式 但是基本思想是计算 帧速率 数量 帧数 如果您正在手动编写
  • pymc3:多个观察值

    我有一些观测数据想要估计参数 我认为这将是尝试 PYMC3 的好机会 我的数据由一系列记录构成 每条记录包含一对与固定的一小时时间段相关的观察结果 一项观察是给定一小时内发生的事件总数 另一个观察结果是该时间段内的成功数量 例如 一个数据点
  • 替代 VSS 进行单人表演(一人军队?)

    我已经为同一个雇主编程了 10 多年 我们唯一使用过的源代码控制是 VSS 抱歉 这就是我开始时他们所拥有的 曾经只有我们几个人 现在有两个 我们通常单独工作 所以 VSS 对我们来说工作得很好 所以 我有两个问题 1 我们是否应该切换到其
  • OpenXML 将段落样式(标题 1、标题 2、标题 3 等)添加到字处理文档

    谁能指导我如何使用开放 XML 字处理在段落上添加预定义样式 我尝试过论坛上提供的各种解决方案 但对我来说没有任何作用 这是我想要完成的任务 Create a document by supplying the filepath Wordp
  • 按钮上方滚动文本,按钮固定在底部

    我很难在 Android 应用程序中获得我想要的 GUI 布局结果 我想要的简要描述 GUI 将包括两个 TextView 和四个按钮 四个按钮水平排列 位于同一行 并固定在屏幕右下角 两个 TextView 中的第一个从屏幕顶部开始 文本
  • 如何使用运行时参数在 Scala 中创建单例对象

    我正在尝试使用运行时指定的参数创建一个单例对象 例子 object NetworkPusher val networkAdress 想象一下 networkAdress 参数来自命令行 我该如何制定解决方法来做到这一点 单例是延迟初始化的
  • 使用 Hibernate 处理文本文件

    我在用休眠在 Java 应用程序中访问我的数据库 它与 MS SQL 和 MySQL 配合得很好 但是我必须在某些表单上显示的一些数据必须来自文本文件 我所说的文本文件是指人类可读的文件 它们可以是 CSV 制表符分隔 甚至是每行的键 值对
  • 如何让顶级git跟踪另一个子目录git下的所有文件

    命令序列 mkdir 顶目录mkdir another git directory触摸文件C触摸屏Dgit 添加 git commit m 子目录初始化 cd 触摸文件触摸文件Bgit 添加 git commit m 顶层目录初始化 git
  • Spring事务不回滚

    我们遇到了 Spring 事务回滚问题 回滚似乎不起作用 在我的服务层方法中 注释为 Transactional我叫三个不同的DAOImpl类插入3条记录 中间插入从第四个表中获取数据以填充描述字段 但这失败了 我预计第一个插入会回滚 但似
  • 使用 pip 将 Python 包安装到不同的目录中?

    我知道明显的答案是使用 virtualenv 和 virtualenvwrapper 但由于各种原因我不能 不想这样做 那么如何修改命令 pip install package name to make pip将软件包安装在默认位置以外的位
  • 如何解决 wsdl2java 上 ObjectFactory 中的冲突?

    我在用着CXF and wsdl2java自动生成Web服务类 问题 不知何故 我想要连接的网络服务的某些元素有重复的名称 Two declarations cause a collision in the ObjectFactory cl
  • 获取 java.time.chrono.HijrahDate 实例的月份名称

    HijrahDate hd HijrahChronology INSTANCE date LocalDate of 2014 11 25 如果我们有HijrahDate实例 预计有一个方法UmalquraCalendar API显示月份名称
  • 我可以将 Must_use 应用于函数结果吗?

    我有一个函数返回一个f64 我想确保使用该函数的输出 而不是仅仅忽略它 有什么办法可以做到这一点吗 返回类型不用于错误处理 因此将其包装在Result or Option确实没有意义 我想要类似的东西 must use fn calcula