Как стать автором
Обновить

Комментарии 4

НЛО прилетело и опубликовало эту надпись здесь

К этому способу можно добавить возвращаемое значение, выглядеть всё будет так же:


Ссылка на playground

Но ведь для такого уже есть плюсы, зачем ещё одни? Никогда не понимал, кстати, необходимости такой перегрузки (кроме конструкторов, пожалуй). Это очень академический подход, порождающий порой неявные ошибки.
Кстати, задумался сегодня об этом и вспомнил эту статью. Тут, разумеется, рабочее решение, хотя и написано громоздко. Но тут скорее речь идёт не о перегрузке, а о решении через джинерики-шаблоны. Нюанс этого решения в том, что в функцию всегда передаётся фиксированное число аргументов.
Раст очень многое впитал от функциональных языков, и это можно решить через алгебраические типы-перечисления, ведь с ними в функцию можно передать какие удобно аргументы. Как-то так, например:
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));
}
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации