#функции #типы_данных #rust
Как можно написать функцию, которая при определенных условиях возвращает значения разных типов? Например: fn function(type_var:&str) { if type_var == "i32" { return 50i32; } else if type_var == "f64" { return 50.0; } else { return '50'; }
Ответы
Ответ 1
В Rust строгая типизация, поэтому тип возвращаемого значения должен быть какой-то один. Тем не менее, можно создать тип-перечисление с различными типами вложенных значений в вариантах: enum ParsedValue { Int32(i32), Float(f64), String(String) } (последний вариант типа String с динамическим выделением и копированием строки, чтобы не отвлекаться на параметры времени жизни; если нужен пример не-аллоцирующей функции, могу развить). Функция в примере будет выглядеть так: fn function(type_var: &str) -> ParsedValue { if type_var == "i32" { ParsedValue::Int32(50) } else if type_var == "f64" { ParsedValue::Float(50.0) } else { ParsedValue::String(String::from("50")) } } По значению ParsedValue все равно придется делать что-нибудь вроде match, чтобы деструктурировать значение варианта, но этот match обязан быть исчерпывающим.
Комментариев нет:
Отправить комментарий