Из следующих Несоответствия типов при разрешении замыкания, которое принимает аргументы по ссылке и Как объявить время жизни для аргумента замыкания? кажется, что решение состоит в том, чтобы изменить:
fn filter<P>(predicate: P)
where
P: Fn(&S) -> bool,
{
predicate(&S {});
}
до
fn filter<'a, P>(predicate: P)
where
P: Fn(&'a S) -> bool,
{
predicate(&S {});
}
Хотя я не уверен почему. Похоже, это связано с предполагаемыми временами жизни, когда замыкание указывается внутри строки, тогда как оно сохраняется в переменной и используется позже. Но неясно, почему &S
требуется время жизни 'a
, когда &S
не является возвращаемым результатом. Если вы понимаете это, пожалуйста, объясните в комментарии.
Хотя этот вопрос «решен», опубликованный изначально случай сбоя фактически не помогает моей истинной проблеме, потому что я не могу редактировать исходный кодУ меня возникли проблемы с https://docs.rs/walkdir/2.2.9/walkdir/struct.IntoIter.html#method.filter_entry
Проблема возникла, когда я попытался передать сохраненный обратный вызов в метод filter_entry
. Решением было бы указать явное время жизни в filter_entry
подписи, как описано ранее в этом посте, но вы можете сделать это только, если вы хотите редактировать сторонний код. Я думаю, что, к сожалению, ответ на эту конкретную проблему таков: «Вы не можете использовать хранимое замыкание с filter_entry
»