Вывод типа в обобщении в Rust
Компилятор сам подставляет тип по аргументу, если его не написали в вызове. Достаточно передать значение, и вид параметра берут из этого значения. Явную запись типа в вызове можно добавить, когда нужно зафиксировать вид вручную.
Возьмем функцию, которая возвращает аргумент без изменений, и посмотрим на вывод типа:
fn identity<T>(value: T) -> T {
value
}
fn main() {
let n = identity(4);
let m = identity::<i32>(7);
println!("{} {}", n, m);
}
Оба результата имеют тип i32: в первом
случае его вывели из литерала, во втором
задали явно после имени функции:
fn identity<T>(value: T) -> T {
value
}
fn main() {
let text = identity(String::from("hi"));
println!("{}", text);
}
Дано число:
let a: i32 = 3;
Передайте a в обобщенную функцию
тождества и выведите число, не указывая
тип в вызове вручную.
Дано число:
let b: i32 = 12;
Повторите вызов, но задайте i32
явно после имени функции и сравните
результат с предыдущей задачей.
Скажите, когда удобнее оставить вывод компилятору, а когда указать тип в вызове самому.