gpt4 book ai didi

generics - 使用生命周期参数的结果-将生命周期参数的枚举应用于默认T <'a> and E<' a>参数(Rust)

转载 作者:行者123 更新时间:2023-12-03 11:36:17 24 4
gpt4 key购买 nike

我正在尝试使用带有生存期参数的Result,作为对T(::Ok(T))和E(::Err(E))通用参数的附加限制。

// enums A<'a> and B<'a> elided

pub enum Result<'a, T=A<'a>, E=B<'a>> {
Ok(T),
Err(E),
}
unused parameter, suggestion: add PhantomData所以它没有用。我读到我可以使用 PhantomData来解决未使用的参数错误,但这对我来说似乎很肮脏。
这项工作都没有:
pub enum Result<T=A<'a>, E=B<'a>> {
Ok(T),
Err(E),
}
undefined parameter, suggestion: add parameter before T (twice)这个建议使我陷入困境!
如何在我的 type通用参数默认值中放入带有生命周期参数的通用 enum

最佳答案

错误是正确的,这种类型没有意义:
由于生存期仅在默认参数中使用,因此在这种情况下,生存期应为:

let foo = Result::Ok(42); // What's the lifetime in this instance?

未使用生命周期,这是错误消息的来源。

这个问题并没有提供太多的上下文,但是似乎您打算只在您的类型中使用 A<'_>B<'_>。如果是这种情况,那么您必须使用
pub enum Result<'a> {
Ok(A<'a>),
Err(B<'a>),
}
这是有效的。但是,这将引发一个问题,为什么您不使用内置的 Result类型,可能与类型别名结合使用以避免重复: type Result<'a> = std::result::Result<A<'a>, B<'a>>;
这是很常见的事情,即使标准库也做过几次:
  • std::io::Result :type Result<T> = Result<T, Error>;
  • std::fmt::Result :type Result = Result<(), Error>;
  • 关于generics - 使用生命周期参数的结果-将生命周期参数的枚举应用于默认T <'a> and E<' a>参数(Rust),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65796965/

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