Я читал ответ на вопрос stackoverflow и пытался изменить функцию history
, чтобы она взяла IntoIter
, где элемент может быть чем угодно, что может быть преобразовано в ссылку и имеет некоторые черты Debug
в этом случае.
Если я удалю V: ?Sized
из определения функции, компилятор ржавчины будет жаловаться, что во время компиляции он не знает размер str
.
use std::fmt::Debug;
pub fn history<I: IntoIterator, V: ?Sized>(i: I) where I::Item: AsRef<V>, V: Debug {
for s in i {
println!("{:?}", s.as_ref());
}
}
fn main() {
history::<_, str>(&["st", "t", "u"]);
}
Я не понимаю, почему компиляторво-первых, показывает ошибку и не уверен, почему программа работает правильно, если я вроде чит с V: ?Sized
.