Comments 5
К этому способу можно добавить возвращаемое значение, выглядеть всё будет так же:
Но ведь для такого уже есть плюсы, зачем ещё одни? Никогда не понимал, кстати, необходимости такой перегрузки (кроме конструкторов, пожалуй). Это очень академический подход, порождающий порой неявные ошибки.
Кстати, задумался сегодня об этом и вспомнил эту статью. Тут, разумеется, рабочее решение, хотя и написано громоздко. Но тут скорее речь идёт не о перегрузке, а о решении через джинерики-шаблоны. Нюанс этого решения в том, что в функцию всегда передаётся фиксированное число аргументов.
Раст очень многое впитал от функциональных языков, и это можно решить через алгебраические типы-перечисления, ведь с ними в функцию можно передать какие удобно аргументы. Как-то так, например:
Раст очень многое впитал от функциональных языков, и это можно решить через алгебраические типы-перечисления, ведь с ними в функцию можно передать какие удобно аргументы. Как-то так, например:
enum Color {
Grin {r: u8, s: String},
Red (f32)
}
fn func(e: Color) {
match e {
Color::Grin { r, s } => {
println!("Grin: {}, {}", r, s)
},
Color::Red (t) => {
println!("Red: {}", t)
}
};
}
fn main() {
func(Color::Grin {r: 9, s: String::from("not bad") });
func(Color::Red (4.5));
}
Уважаемый автор.
Это не компилируется, ибо вызов неоднозначен и Rust не пытается выяснить, какая их функций — в зависимости от типов/числа аргументов — вызывается
На 2025 год компилируется
https://play.rust-lang.org/?version=stable&mode=debug&edition=2015&gist=871b644b8238afbae53a801a92242f04
Compiling playground v0.0.1 (/playground)
warning: trait FooA
is never used
--> src/main.rs:1:7
|
1 | trait FooA { fn foo(_: i32); }
| ^^^^
|
= note: #[warn(dead_code)]
on by default
warning: playground
(bin "playground") generated 1 warning
Finished dev
profile [unoptimized + debuginfo] target(s) in 0.82s
Running target/debug/playground
Standard Output
FooB
Sign up to leave a comment.
Rust: пробуем перегрузку функций