gpt4 book ai didi

rust - 在 From 实现中 panic 是惯用的吗?

转载 作者:行者123 更新时间:2023-12-05 03:37:11 25 4
gpt4 key购买 nike

文档位于 https://doc.rust-lang.org/std/convert/trait.From.html

Note: This trait must not fail. If the conversion can fail, use TryFrom.

假设我有一个 From 实现:

impl From<SomeStruct> for http::Uri {
fn from(item: SomeStruct) -> http::Uri {
item.uri.parse::<http::Uri>() // can fail
}
}

进一步假设我完全确定 item.uri.parse 会成功。在这种情况下 panic 是惯用的吗?说,用:

item.uri.parse::<http::Uri>().unwrap()

在这种特殊情况下,似乎无法在编译时构造 HTTP URI:https://docs.rs/http/0.2.5/src/http/uri/mod.rs.html#117 .在实际场景中 .uri 是一个关联的常量,所以我可以测试所有使用的值解析。但在我看来,可能还有其他情况,当作者对一段代码的无误性充满信心时,尤其是当这种信心可以在测试中编码时,因此更喜欢 From 的人体工程学尝试从。 Rust 编译器,通常非常严格,不会阻止这种行为,尽管它似乎可以。这让我觉得这是作者被故意允许做出的决定。所以问题是:在这种情况下人们倾向于做什么?

最佳答案

所以一般来说,特征只强制实现者遵守特征中规定的签名和类型。至少这是编译器强制执行的。

除此之外,还有一些契约期望 traits 必须遵守,这样使用这些 traits 的人就不会感到奇怪的惊喜。编译器不检查这些契约;那将是相当困难的。

没有什么能阻止你实现一个特征的所有方法,但是以与特征完全无关的方式,比如实现 Display 特征,然后在 fmt方法实际上并不费心使用 write! 而是,我不知道,删除用户的主目录。

现在回到您的具体案例。如果您的 from 方法不会失败,那么您当然可以使用 .unwrapcannot fail contract for the From trait 的要点是那些依赖 From trait 的人希望能够假设转换将每次。如果您实际上在您自己的 from 实现中感到 panic ,这意味着转换有时不会通过,这与From 特征。

关于rust - 在 From 实现中 panic 是惯用的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69408253/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com