将u8数组的引用转换为<vec <u8>&gt;

时间:2017-04-13 11:21:41

标签: arrays generics rust traits

我正在尝试创建一个需要T: Into<Vec<u8>>的函数,但是当我尝试将u8数组传递给它时,即使实现From<&'a [T]>>它也不会编译Vec

the trait `std::convert::From<&[u8; 5]>` is not implemented for `std::vec::Vec<u8>`

这是我的代码

fn is_hello<T: Into<Vec<u8>>>(s: T) {
    let bytes = b"hello".to_vec();
    assert_eq!(bytes, s.into());
}

fn main() {
    is_hello(b"hello");
}

2 个答案:

答案 0 :(得分:4)

它不起作用,因为b"hello"的类型为&[u8; 5],但未实现Into<Vec<u8>>。您需要传递&[u8]切片才能进行编译:

is_hello(&b"hello"[..]);

我建议使用以下问题来解释切片和数组之间的区别:What is the difference between Slice and Array?

答案 1 :(得分:2)

数组通常被强制切片,但有时没有隐式转换。

还有其他一些强迫胁迫的方法:

b"hello" as &[u8]
b"hello".borrow()