Более приятная арифметика для примитивных типов в Rust

Есть ли более удобный способ выполнения арифметических операций с различными примитивными типами (с автоматическим продвижением вверх), чем явное приведение и развертывание?

Например, в случае, как:

let a: u8 = 1;
let b: u16 = 2;
let c: u32 = 3;

могу ли я как-то избавиться от всех приведений в:

let total: u64 = a.to_u64().unwrap() + b.to_u64().unwrap() + c.to_u64().unwrap();

person viraptor    schedule 26.11.2014    source источник


Ответы (1)


Да, вы можете использовать as:

let total: u64 = a as u64 + b as u64 + c as u64;

Дополнительная информация о приведении типов: http://doc.rust-lang.org/reference.html#type-cast-expressions

person Dogbert    schedule 26.11.2014
comment
Примечание: раньше вы могли реализовать трейт только один раз для типа impl Add<Right, Result> for Left, таким образом, только один раз для u8... с Right равным u8. Со связанными типами на подходе черта Add может быть переработана так, чтобы ее можно было реализовать несколько раз для данного Left, и, например, разрешить u8 + u32 давать u32. Однако связанные типы не готовы. - person Matthieu M.; 26.11.2014