在为 return 特定类型的通用结构实现方法时如何修复 "cannot infer type" 错误?

How to fix "cannot infer type" error when implementing methods for a generic struct that return specific types?

我正在学习使用泛型类型创建函数,但由于 cannot infer type for type parameter 'X' 这个错误,我被困了几个小时。假定在我的实现中我已经定义了 XY 将具有的类型。

pub struct Generate<X, Y> {
    pub data_type: X,
    pub data_config: Y,
}

impl<X, Y> Generate<X, Y> {
    pub fn new_bi() -> Generate<u16, String> {
        Generate {
            data_type: 10,
            data_config: String::from("Hello"),
        }
    }
    pub fn new_an() -> Generate<String, u16> {
        Generate {
            data_type: String::from("Hello"),
            data_config: 10,
        }
    }
}

fn main() {
    let y = Generate::new_bi(); // ERROR HERE
    let y: Generate<u16, String> = Generate::new_bi(); // I tried this but it didn't work
}
error[E0282]: type annotations needed
  --> src/lib.rs:22:13
   |
22 |     let y = Generate::new_bi(); // ERROR HERE
   |             ^^^^^^^^^^^^^^^^ cannot infer type for type parameter `X`

error[E0282]: type annotations needed
  --> src/lib.rs:23:36
   |
23 |     let y: Generate<u16, String> = Generate::new_bi(); // I tried this but it didn't work
   |                                    ^^^^^^^^^^^^^^^^ cannot infer type for type parameter `X`

可以根据类型具体实现:

pub struct Generate<X, Y> {
    pub data_type: X,
    pub data_config: Y,
}

impl Generate<u16, String> {
    pub fn new_bi() -> Generate<u16, String> {
        Generate {
            data_type: 10,
            data_config: String::from("Hello"),
        }
    }
}

impl Generate<String, u16> {
    pub fn new_an() -> Generate<String, u16> {
        Generate {
            data_type: String::from("Hello"),
            data_config: 10,
        }
    }
}

fn main() {
    let y = Generate::new_bi();
    let y: Generate<u16, String> = Generate::new_bi();
    let x = Generate::new_an();
}

Playground