为什么允许这样做:
let payload = "key1=value1";
let value: Vec<&str> = payload.split("=").collect();
let value = value[1];
println!("value is {:?}", value);
但不是这个:
let payload = "key1=value1";
let value: Vec<&str> = payload.split("=").collect()[1];
println!("value is {:?}", value);
错误结果:
80 | let value: Vec<&str> = payload.split("=").collect()[1];
| ^^^^^^^ cannot infer type for type parameter `B` declared on the associated function `collect`
|
= note: type must be known at this point
不是两个等效项(相同的'要解析的令牌',在编译器方面),只是分成不同的行吗?
我不明白第一种语法中包含哪些额外的信息以使推断成为可能。
或者不是关于'推断不可能'(因为编译器警告),但是由于Rust语法,约定等而被禁止使用?
谢谢
PS:对不起,我的头衔很抱歉...我确实没有找到更清楚的东西/了解这是此类问题的正确命名。
为什么允许这样做:let payload =“ key1 = value1”; let值:Vec = payload.split(“ =”)。collect();让值=值[1]; println!(“ value is {:?}”,value);但这不是:让有效负载= ...
第一段,
您的类型注释在第二个示例中变得无效。您想要的是这个:
您正在迭代器上使用collect方法,该方法需要一个“类型”来知道应将其收集到的内容。https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.collect