LINUX.ORG.RU

История изменений

Исправление tailgunner, (текущая версия) :

Тут же вроде бы используется жёсткая привязка по типу результата. Меня интересует, можно ли изменить именно это (с системой traits в целом знаком, она ок)

Так?

trait ConvertTo<X: ?Sized> {
    fn to(self: &Self) -> X;
}

impl ConvertTo<String> for i32 {
    fn to(self: &i32) -> String { self.to_string() }
}

impl ConvertTo<f32> for i32 {
    fn to(self: &i32) -> f32 { 0f32 }
}

fn main() {
  let x: String = (123i32).to();
  println!("{}", x);
  let x: f32 = (123i32).to();
  println!("{}", x);
}

Исходная версия tailgunner, :

Тут же вроде бы используется жёсткая привязка по типу результата. Меня интересует, можно ли изменить именно это (с системой traits в целом знаком, она ок)

Так?

trait ConvertTo<X: ?Sized> {
    fn to(self: &Self) -> X;
}

impl ConvertTo<String> for i32 {
    fn to(self: &i32) -> String { self.to_string() }
}

impl ConvertTo<f32> for i32 {
    fn to(self: &i32) -> f32 { 0f32 }
}

fn main() {
  let x: String = (123i32).to();
  println!("{}", x);
  let x: f32 = (123i32).to();
  println!("{}", x);
}