代码之家  ›  专栏  ›  技术社区  ›  adrianp

通过泛型格式化为整数的Rust浮点

  •  0
  • adrianp  · 技术社区  · 2 年前

    我有以下Rust代码:

    #[derive(Debug)]
    struct Point<T, U> {
        x: T,
        y: U
    }
    
    impl<T: std::fmt::Display, U: std::fmt::Display> Point<T, U> {
        fn print(&self) {
            println!("{} {}", &self.x, &self.y );
        }
    }
    
    impl<X1, Y1> Point<X1, Y1> {
        fn mixup<X2, Y2>(self, other: Point<X2, Y2>) -> Point<X1, Y2> {
            Point {
                x: self.x,
                y: other.y,
            }
        }
    }
    
    fn main() {
        let integer = Point {x: 1, y:2};
        let float = Point{x: 2.0, y:3.0};
    
        let floaty = integer.mixup(float);
    
        println!("{:?}", floaty); // output: Point { x: 1, y: 3.0 } - OK
        floaty.print(); // output: 1 3 - NOT OK
    }
    

    为什么 floaty.print() 胁迫 3.0 3 ? 如何 print 方法实现了吗?

    1 回复  |  直到 2 年前
        1
  •  5
  •   Cerberus    2 年前

    最小化示例:

    fn main() {
        println!("{} {:?}", 3.0, 3.0);
    }
    

    ( Playground )

    这个打印 3 3.0 ,即没有小数部分的浮点通过格式化 Display 作为整数。这没什么问题 print 功能-只是事实 陈列 意味着人类可读输出,对于人类可读输出而言,选择在可能的情况下打印整数。