问题描述
我正在尝试使用生命周期参数创建 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::Result
:type Result = Result<(),Error>;
-
std::fmt::Result
:IList<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); } } } }