#hobby #multiple-values #util-lib #no-dependency

无 std disuse

通知实现函数返回值被弃用的方法

2 个版本

0.0.2 2022 年 3 月 4 日
0.0.1 2021 年 12 月 25 日

#1487 in Rust 模式

每月 26 次下载
3 个 crate 中使用 (通过 const-array-attrs)

MIT/Apache

5KB

Latest Release pipeline status coverage report

描述

通知实现函数返回值被弃用的方式。

用法

当一个算法可以同时计算出多个有用的值时,你将编写如下代码。

pub fn some_algorithm(x: f64) -> (f64, f64, f64) {
    let mut r1 = 0f64; let mut r2 = 0f64; let mut r3 = 0f64;

    for _ in 0..1000 { // ... some heavy calculations here ...
        r1 += x;
        r2 += x * 2.0;
        r3 += x * 3.0;
    }
    (r1, r2, r3)
}

// But your users are not always need all return values.
// Yes, we can ignore the return values, but calculations done.

let (a, _, _) = some_algorithm(4.0);

上述示例代码可以使用 Disuse 重新编写如下,

use disuse::Disuse;

pub fn some_algorithm<R1, R2, R3>(x: f64) -> (R1, R2, R3)
where
    R1: From<f64>, R2: From<f64>, R3: From<f64>
{
   let mut r1 = 0f64; let mut r2 = 0f64; let mut r3 = 0f64;

   for _ in 0..1000 { // ... heavy calculations here ...
       r1 += x;
       r2 += x * 2.0; // When user call this function like below,
       r3 += x * 3.0; // we can expect the compiler eliminate this two line, right?
   }
   (r1.into(), r2.into(), r3.into())
}

let (a, _, _): (f64, Disuse, Disuse) = some_algorithm(4.0);

比之前版本更好。

(但返回类型应实现 Clone 特性。)

如果单元类型 (()(单元)) 实现了如下 From 特性,

impl<T> From<T> for () {
    fn from(_: T) -> () { () }
}

上述示例代码可以编写得更智能。

pub fn some_algorithm<R1, R2, R3>(x: f64) -> (R1, R2, R3)
where
    R1: From<f64>, R2: From<f64>, R3: From<f64>
{
   let mut r1 = 0f64; let mut r2 = 0f64; let mut r3 = 0f64;

   for _ in 0..1000 { // ... heavy calculations here ...
       r1 += x;
       r2 += x * 2.0; // When user call this function like below,
       r3 += x * 3.0; // we can expect the compiler eliminate this two line, right?
   }
   (r1.into(), r2.into(), r3.into())
}

let (a, _, _): (f64, (), ()) = some_algorithm(4.0);

这只是一个不可能实现的梦想...

无运行时依赖