Pull to refresh

Comments 4

UFO just landed and posted this here
Но ведь для такого уже есть плюсы, зачем ещё одни? Никогда не понимал, кстати, необходимости такой перегрузки (кроме конструкторов, пожалуй). Это очень академический подход, порождающий порой неявные ошибки.
Кстати, задумался сегодня об этом и вспомнил эту статью. Тут, разумеется, рабочее решение, хотя и написано громоздко. Но тут скорее речь идёт не о перегрузке, а о решении через джинерики-шаблоны. Нюанс этого решения в том, что в функцию всегда передаётся фиксированное число аргументов.
Раст очень многое впитал от функциональных языков, и это можно решить через алгебраические типы-перечисления, ведь с ними в функцию можно передать какие удобно аргументы. Как-то так, например:
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));
}
Sign up to leave a comment.

Articles