我正在尝试创建一个需要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");
}
答案 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()