【问题标题】:Expected vector but found struct collections::vec::Vec预期的向量,但找到了 struct collections::vec::Vec
【发布时间】:2014-09-02 15:51:08
【问题描述】:

我刚开始学习 Rust,偶然发现了这个愚蠢的问题:

error: mismatched types: expected `&[u8]` but found `&collections::vec::Vec<u8>` (expected vector but found struct collections::vec::Vec)

我的代码如下所示:

let compressed_contents = match File::open(&Path::new(path)).read_to_end() {
    Ok(f) => f,
    Err(e) => fail!("File error: {}", e),
};
let contents = inflate_bytes(&compressed_contents);

它需要一个向量,我给它一个向量。显然它还需要其他类型的向量?

【问题讨论】:

    标签: rust


    【解决方案1】:

    它需要一个向量,我给它一个向量。

    不,你错了 :) 它需要一个 slice 并且你给它一个向量。使用as_slice()方法从Vec&lt;u8&gt;获取&amp;[u8]

    let contents = inflate_bytes(compressed_contents.as_slice());
    

    【讨论】:

    • 为什么错误信息是expected vector but found X
    • @KaiSellgren,对不起,但我不明白错误消息是如何说的。它说expected `&amp;[u8]` but ...,但&amp;[T] 是一个切片,而不是一个向量。
    • @VladimirMatveev 在错误消息的最后,它确实说(expected vector but found struct collections::vec::Vec)
    • @ChrisJones,啊,对不起,你说得对,真丢脸。这绝对是编译器中没有人费心清理的剩余部分。直到最近(甚至现在)它在一些错误消息中将Box&lt;T&gt; 打印为~TGc&lt;T&gt; 作为@T,尽管这种语法已经long消失了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多