start_loop<F>(&mut self, listen: &str, threads: usize, func: F) where F: Fn(Option<&mut ByteStream>) -> FuncResult + Send + Copy + 'static {
...
}
Можно ли как-то тип F куда-то в type alias вынести?
нет
Очень жаль, было бы полезно так выносить и делать компактные описания :(
максимум ты можешь в трейт отдельный вынести trait MyFn: Fn(Option<&mut ByteStream>) -> FuncResult + Send + Copy + 'static {} impl<F> MyFn for F where F: Fn(Option<&mut ByteStream>) -> FuncResult + Send + Copy + 'static {} pub fn start_loop<F>(&mut self, listen: &str, threads: usize, func: F) where F: MyFunc { ... }
Не, не стоит разводить сущности ради такого :(
В расте маленькие трейты - это норма
Не нравится мне такая норма.
Ну современное программирование не любит монстуозные классы, интерфейсы, функции и другие сущности, трейты не исключение
Я не про твой пример, а в целом, о том что маленькие самодостаточные трейты это ок
Не, это понятно. Когда они используются по назначению, то есть в качестве интерфейсов, это норма :)
Обсуждают сегодня