在为 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'
这个错误,我被困了几个小时。假定在我的实现中我已经定义了 X
和 Y
将具有的类型。
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();
}
我正在学习使用泛型类型创建函数,但由于 cannot infer type for type parameter 'X'
这个错误,我被困了几个小时。假定在我的实现中我已经定义了 X
和 Y
将具有的类型。
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();
}