【问题标题】:How to properly cast to a negative number in Rust?如何在 Rust 中正确地转换为负数?
【发布时间】:2022-11-29 03:30:42
【问题描述】:

在 Rust 中,这段代码是有效的:

let signedInt: i32 = 23*-1;

然而,这不是:

let unsignedInt: u16 = 2;
let signedInt: i32 = unsignedInt*-1;

这是有道理的,因为 Rust 试图将 -1 解释为与 unsignedInt 具有相同类型。 所以需要铸造。但是,当使用更多类型时,上述转换变得非常难看:

-((unsignedInt*320) as f32)

这样做是必要的,因为 -(unsignedInt*320) 是一个无效的表达式。但是上面的代码基本上是不可读的,我想知道使它既有效的 Rust 又可读的最佳方法是什么。

谢谢 !

【问题讨论】:

  • 惯用的 Rust 偏爱明确性而不是简洁的语法......一般来说.这只是语言设计哲学的一部分,随着你写更多的 Rust,你会习惯的。这个想法是,它在许多情况下有助于代码的清晰度:而且,根据我自己的经验,确实如此。

标签: rust casting


【解决方案1】:

Rust 需要显式转换,因为它是其他语言(如 C)的常见错误来源。通常,您应该避免使用 as,并尽可能使用 frominto,否则使用 try_from/try_into。主要的例外是 int<->float 强制转换,目前只有 as 才有可能。

因为u16中的所有数字都可以用i32表示,所以你的第二个例子可以写成:

let unsignedInt: u16 = 2;
let signedInt = i32::from(unsignedInt) * -1;

您的第三个示例仍然必须使用 as 强制转换来编写,但您可以省略变量类型:

let unsignedInt: u16 = 2;
let float = -((unsignedInt * 320) as f32);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 2011-04-20
    • 1970-01-01
    • 2019-01-19
    • 2023-02-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多