为什么会这样

fn main() {
    let test = "5% of foo".to_string();
    let result: i32 = test.split('%').collect()[0].parse().unwrap_or(0);
}

出错

error[E0282]: type annotations needed
 --> src/main.rs:4:23
  |
4 |     let result: i32 = test.split('%').collect()[0].parse().unwrap_or(0);
  |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot infer type for `B`

这也无济于事:

let result: i32 = test.to_string().split('%').collect()[0].parse().unwrap_or(0i32);

推荐答案

fn main() {
    let test = "5% of foo".to_string();
    let result: i32 = test.split('%').collect::<Vec<_>>()[0].parse().unwrap_or(0);
}

collect()可以成为实现FromIterator的任何类型,因此需要类型提示.

或者,可以通过使用惰性迭代器来提高效率.

fn main() {
    let test = "5% of foo".to_string();
    let result: i32 = test.split('%').next().unwrap_or("0").parse().unwrap_or(0);
}

Rust相关问答推荐

捕获Rust因C++异常而产生panic

阻止websocket中断的中断中断的终端(操作系统错误4)

如何处理动态 struct 实例化?

文档示例需要导入相关的 struct ,但仅在运行测试时.这是故意的行为吗?

Rust类似功能是C++命名空间吗?

为什么铁 rust S的默认排序功能比我对小数组的 Select 排序稍微慢一些?

关于 map 闭合求和的问题

无法将 rust 蚀向量附加到另一个向量

对reqwest提供的这种嵌套JSON struct 进行反序列化

期望一个具有固定大小 x 元素的数组,找到一个具有 y 元素的数组

仅在使用 &mut 或线程时borrow 的数据在闭包之外转义?

需要一个有序向量来进行 struct 初始化

在没有任何同步的情况下以非原子方式更新由宽松原子操作 Select 的值是否安全?

Rust Redis 中的 HSET 命令问题

我什么时候应该使用特征作为 Rust 的类型?

为什么 Rust 允许写入不可变的 RwLock?

如何创建递归borrow 其父/创建者的 struct ?

第 7.4 章片段中如何定义 `thread_rng`

Rust 中的let是做什么的?

在 Rust 中获得准确时间的正确方法?