Тип Mutate универсальной переменной в Rust - PullRequest
0 голосов
/ 10 октября 2019

Я знаю, что вы не можете изменить тип переменной. Таким образом, исходя из других языков программирования, где будет работать следующее:

struct Point<T> {
    x: T,
    y: T,
}

fn main() {
    let mut p = Point { x: 1, y: 1 }; // p is type of Point<u8> now
    p = Point { x: 1.0, y: 1.0 }; // p should be type of Point<float> now
}

Мой вариант использования для этого будет то, что вы назначаете значение по умолчанию для переменной, а в конкретном случае вы меняете значение. Но оба имеют, например, универсальный тип Point<T>, а остальная часть кода работает только с этим универсальным типом, а не с конкретным.

Каков наилучший метод в Rust для достижения такого типа рабочего процесса?

РЕДАКТИРОВАТЬ:

Лучшим примером для понимания того, что я хочу достичь, может быть следующий: DateTime<Tz> дан ящиком chrono.


fn main() {
   let is_utc = ....;

   let mut datetime = Local::now(); // datetime is now of type DateType<Local>

   if is_utc {
       datetime = Utc::now(); // datetime is now of type DateType<Utc>
   }

   format(datetime);
}


fn format<Tz: TimeZone>(datetime: DateTime<Tz>) where Tz::Offset : fmt::Display {
    // here is someother code to justify this extra function :)
    datetime.format("%a %b %e %k:%M:%S %Z %Y");
}

Таким образом, функция format не является тем, чем является Tz, за исключением того, что она должна иметь тип TimeZone.

...