如何解决Rust IP地址类型推断报错cannot infer type for `{integer}`问题
问题修复方案
报错原因
这个Rust编译错误是因为异步函数体内的编译器类型推断能力受限,你传入的[127, 0, 0, 1]是无类型整数字面量组成的数组,run方法的参数签名没有提供足够的类型提示,编译器无法判断数组元素应该为u8还是其他整数类型,因此抛出E0698错误。
可选择的修复方法
- 给数组元素增加显式类型标注,只要标注第一个元素的类型即可,后续元素编译器会自动推导:
也可以给整个数组做类型转换:.run(([127u8, 0, 0, 1], 3030)).run(([127, 0, 0, 1] as [u8; 4], 3030)) - 直接使用标准库的IP地址类型,可读性更强也完全避免类型推断问题:
先引入Ipv4Addr:
调用时写法如下:use std::net::Ipv4Addr;.run((Ipv4Addr::new(127, 0, 0, 1), 3030)) - 直接封装为标准SocketAddr类型传入,适配绝大多数web框架的
run方法参数要求:.run(std::net::SocketAddr::from(([127, 0, 0, 1], 3030)))
内容的提问来源于stack exchange,提问作者Evan Carroll
相关产品推荐
相关产品推荐

