Rust推断不可能用内联,但是当分成两个分配时允许使用

问题描述 投票:0回答:3

为什么允许这样做:

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);但这不是:让有效负载= ...

types syntax rust type-inference
3个回答
0
投票

第一段,


0
投票

您的类型注释在第二个示例中变得无效。您想要的是这个:


0
投票

您正在迭代器上使用collect方法,该方法需要一个“类型”来知道应将其收集到的内容。https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.collect

© www.soinside.com 2019 - 2024. All rights reserved.