name: String,
env_filter: String,
sink: Sink,
) -> impl Subscriber + Send + Sync
where
Sink: for<'a> MakeWriter<'a> + Send + Sync + 'static,
аргумент sink у нас принимает что-то, что соответствует условию описанному в поле where. Как понять Sink: for<'a> MakeWriter<'a>? Я знаю что это HRTB. но что это значит и почему нельзя написать по другому. а также не понимаю еще один момент мы при вызове функции можем использовать в этом аргументе std::io::stdout но трейт баунд MakeWriter<‘a> из либы tracing_subscriber. как std::io::stdout подходит для этого аргумента если оно не реализует трейт MakeWriter. видимо это баунд означает что то другое.
Ого, первый раз встречаю for в таком месте 😐
Без него бывает никак
stdout не должен подходить для этого параметра. Подойдёт замыкание или функция, возвращающая stdout. Там есть реализация MakeWriter для Fn() -> W, W: Write
std::io::stdout и есть функция, как в std либе может быть реализация для трейта из tracing_subscriber?
А, точно. Я имел в виду результат выполнения stdout
Реализация не в std, а в tracing_subscriber impl<'a, F, W> MakeWriter<'a> for F where F: Fn() -> W, W: Write, Функция из std просто попадает под эту реализацию
ок эта сигнатура и баунд мне понятен. а для чего HRTB в моем вопросе?
Обсуждают сегодня