如何在Rust中注释空切片的类型?

池子

假设我想将aVec<String>与测试中的文字空列表进行比较

(我知道实际上可以检查is_empty(),但是我想了解Rust类型在这里的工作原理,并且我认为断言相等将在失败时给出更清晰的信息。)

如果我只是说

    let a: Vec<String> = Vec::new();
    assert_eq!(a, []);

得到一个错误的是

error[E0282]: type annotations needed
 --> src/main.rs:3:5
  |
3 |     assert_eq!(a, []);
  |     ^^^^^^^^^^^^^^^^^^ cannot infer type
  |
  = note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)

我认为问题是rustc无法分辨我的意思是的空列表还是String,还是其他的空列表&str

如何在[]文字上添加所需的类型注释

这是否取决于尚未稳定的类型归属功能,还是有一种稳定的方法来指定此功能?

池子

一种方法是工程今天是as投指定的类型和长度:

assert_eq!(a, [] as [&str; 0]);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章