4
我有一個函數foo
定義如下指定的函數指針類型的壽命:在結構
fn foo<'a>(a: &'a i32, b: &i32) -> &'a i32 { a }
我想一個指針都存儲在一個結構:
struct S {
f: fn(a: &i32, b: &i32) -> &i32,
}
因爲有是兩個輸入壽命,結果壽命不能被推斷:
error[E0106]: missing lifetime specifier
|
2 | f: fn(a: &i32, b: &i32) -> &i32,
| ^expected lifetime parameter
|
= help: this function's return type contains a borrowed value,
but the signature does not say whether it is borrowed from a or b
當我問comp iler爲foo
的類型,它是不是非常有幫助或者:
let() = foo;
給我
expected type `fn(&'a i32, &i32) -> &'a i32 {foo}`
這顯然是因爲'a
不被任何定義不起作用。
那麼我如何在這種情況下聲明一生?嘗試其中之一
f: fn<'a>(a: &'a i32, b: &i32) -> &'a i32
f<'a>: fn(a: &'a i32, b: &i32) -> &'a i32
導致語法錯誤,而且我無法找到涵蓋此特定情況的文檔。
但會意味着對''(sf)(&x,&y)'的調用在'a'和'b'的生命週期中不再是泛型的,與'foo(&x,&y)'不同。 –
太棒了!我不瞭解HRTB。 –