我正在努力了解终生子类型的工作原理。名称subtype
告诉我,如果'b
是'a
的子类型,那么'a
类型的事物可以在任何'b
类型的事物中使用。用过的。而且实际上,在有生之年的背景下,我看不出允许这样做会导致什么问题。但是,以下代码
fn test<'a, 'b: 'a>(first: &'a mut str, second: &'b mut str) -> &'b str {
// do something to choose between the two arguments,
// eventually pick first on some branch
first
}
不起作用,因为“这两种类型声明了不同的生存期...但是来自first
的数据在这里流入second
。”
那么,如果允许这样做会出什么问题?
答案 0 :(得分:1)
那么,如果允许这样做会出什么问题?
在此示例中,您的推理被颠倒了:约束'b: 'a
读为“ 'b
的生存期限为'a
” 。由于test
的输出至少需要生存 到生命周期'b
,因此'a
仍然表示生命周期可能不兼容,并且{{1} }实际上寿命可能不够长。
如果将生命周期缩短,那么代码将进行编译。
first