Несколько типов в функции в Rust
У одной функции может быть два независимых имени типа. Каждый параметр связан со своим именем, и они не обязаны совпадать. Так удобно собирать кортеж или структуру из частей разного вида одной записью.
Запишем функцию, которая возвращает пару из двух аргументов:
fn pair<A, B>(a: A, b: B) -> (A, B) {
(a, b)
}
fn main() {
let both = pair(1, String::from("go"));
println!("{} {}", both.0, both.1);
}
Тот же шаблон подойдет, когда оба значения числовые, но типы полей кортежа все равно могут различаться:
fn pair<A, B>(a: A, b: B) -> (A, B) {
(a, b)
}
fn main() {
let both = pair(2i64, 3i32);
println!("{} {}", both.0, both.1);
}
Даны значения:
let left = 5;
let right = String::from("ru");
Соберите кортеж через обобщенную функцию
пары из left и right и выведите
оба поля.
Дано число:
let code: i32 = 9;
Верните пару из code и строки
"tag" одной функцией с двумя
именами типа и выведите второй элемент.
Скажите, чем два имени типа в одной функции отличаются от одного имени на оба параметра.