История изменений
Исправление
anonymous-angler,
(текущая версия)
:
В позиции параметра эти две конструкции эквивалентны:
fn foo<T: Bar>(t: T) {
/*...*/
}
fn foo(t: impl Bar) {
/*...*/
}
Так сделали не от большого ума, а потому что кто-то предложил «за компанию добавить и в параметры». ИМХО, зря.
В первую очередь это ввели для случая с возвращаемым значением. Если конкретно: потому что замыкание имеет конкретный тип, но ты его не можешь назвать:
fn foo(a: i32) -> /* ??? */ {
move |x: i32| a * x
}
impl
существует скорее всего из-за семантики:
dyn Trait
- что угодно, безразмерное.impl trait
- что-то одно, конкретное, размерное.
А просто Trait
- это класс типпов, а не тип, поэтому возвращать его - какой-то нонсенс.
Исходная версия
anonymous-angler,
:
В позиции параметра эти две конструкции эквивалентны:
fn foo<T: Bar>(t: T) {
/*...*/
}
fn foo(t: impl Bar) {
/*...*/
}
Так сделали не от большого ума, а потому что кто-то предложил «за компанию добавить и в параметры». ИМХО, зря.
В первую очередь это ввели для случая с возвращаемым значением. Если конкретно: потому что замыкание имеет конкретный тип, но ты его не можешь назвать:
fn foo(a: i32) -> /* ??? */ {
move |x: i32| a * x
}
impl
существует скорее всего из-за семантики:
dyn Trait
- что угодно, безразмерное.impl trait
- что-то одно, конкретное.
А просто Trait
- это класс типпов, а не тип, поэтому возвращать его - какой-то нонсенс.