我有一個小型庫,它導出帶有生命週期註釋的結構體。現在我試圖從另一個程序中使用它,但現在我似乎也需要在那裏使用生命週期註釋。基本上我這樣做:生命週期註釋或&str vs字符串
// in my lib
struct Foo<'a> {
baz: &'a str
}
// another program
struct Bar {
foo: Foo
}
它說Bar
必須定義一個一生Foo
:
<anon>:6:10: 6:13 error: wrong number of lifetime parameters: expected 1, found 0 [E0107]
<anon>:6 foo: Foo
^~~
這很容易解決:
struct Bar<'a> {
foo: Foo<'a>
}
但是,這將意味着我現在還必須爲任何使用Bar
的事物定義生命週期,等等,對嗎?如果這是真的,除了使用不需要明確生命週期的類型之外,是否有任何方法可以解決這個問題?或者是否會更好地使用像String
這樣的擁有類型?
有點背景,我用&str
因爲我不得不調用一個需要作爲參數的函數。雖然轉換它們沒有問題,但它實際上是Vec<(&str, &str)>
,所以我的想法是首先使用正確的類型來擺脫轉換。我有一種感覺,那是錯誤的決定,但是我知道什麼...... :)
請注意,Rust中存在「廉價」轉換;按照慣例,那些由'as_'開頭的方法名稱表示。例如'String :: as_slice'產生一個'&str',它借用它來自的'String'。 –