Страницы

Поиск по вопросам

вторник, 7 января 2020 г.

Функция, возвращающая значения разных типов

#функции #типы_данных #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 обязан быть исчерпывающим.

Комментариев нет:

Отправить комментарий