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