微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有生命周期参数的结果 - 带有生命周期参数的枚举应用于默认的 T<'a> 和 E<'a> 参数Rust

如何解决带有生命周期参数的结果 - 带有生命周期参数的枚举应用于默认的 T<'a> 和 E<'a> 参数Rust

我正在尝试使用生命周期参数创建 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>,}

undefined parameter,suggestion: add parameter before T
(twice)

这个建议让我无语了!

如何将具有生命周期参数的泛型 type 放入我的 enum 泛型参数认值中?

解决方法

错误是正确的,这种类型没有意义:

由于生命周期仅用于默认参数,在这种情况下生命周期是什么:

A<'_>

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


该问题没有提供太多上下文,但您似乎打算在您的类型中只使用 B<'_>pub enum Result<'a> { Ok(A<'a>),Err(B<'a>),} 。如果是这种情况,那么您必须使用

Result

这是有效的。但是,这会引发一个问题,即为什么不使用内置 type Result<'a> = std::result::Result<A<'a>,B<'a>>; 类型,可能与类型别名结合使用以避免重复:type Result<T> = Result<T,Error>;。 这是很常见的做法,甚至标准库也会这样做几次:

  • std::io::Resulttype Result = Result<(),Error>;
  • std::fmt::ResultIList<DBTables> listOne = new List<DBTables>(); private void textBox2_TextChanged(object sender,EventArgs e) { this.listBox1.DataSource = null; if (!string.IsNullOrEmpty(textBox2.Text)) { string toFind = textBox2.Text; //listone.name is dataName foreach (DBTables s in listOne) { string dataName = s.Name; if (dataName.Contains(toFind)) { listBox1.Items.Add(dataName); } } } }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。