我有以下簽名的函數:傳遞切片作爲IntoIterator
pub fn history<'a, I: IntoIterator<Item = &'a str>>(&self, _: I)
後來,我有一個字段一個struct稱爲main
這是一個盒裝關閉。
main: box |args: &[&str], shell: &mut Shell| {
shell.history.history(args);
},
的重要組成部分,是我打電話我發現簽名與&[&str]
作爲參數的函數。我得到以下編譯錯誤:
src/main.rs:281:47: 281:54 error: type mismatch resolving `<&[&str] as core::iter::IntoIterator>::Item == &str`:
expected &-ptr,
found str [E0271]
src/main.rs:281 shell.history.history(args);
因此很明顯,&[&str]
不作爲IntoIterator
工作。我試過shell.history.history(args.into_iter());
,並得到了類似的錯誤消息。
奇怪的是,shell.history.history(args.iter().map(|s|*s));
確實有效。這看起來似乎是正確的解決方案。
所以是地圖實際上是一個「好」的解決方案?這似乎是一個迂迴的方法。 – skyler
查看我的編輯另一種解決方案。 –
@FrancisGagné不能'AsRef'被用來代替自定義'IntoStrSlice'? –