2017-04-13 5 views
2

T: Into<Vec<u8>>が必要な関数を作成しようとしていますが、u8の配列を渡そうとするとFrom<&'a [T]>>が実装されてもコンパイルできませんVecによって:u8の配列の参照を<Vec<u8>に変換する>

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"); 
} 

答えて

4

あるb"hello"Into<Vec<u8>>を実装していない&[u8; 5]を入力しているので、それは、動作しません。あなたはそれがコンパイルするためには&[u8]スライスを渡す必要があります:What is the difference between Slice and Array?

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

私はスライスと配列の違いの説明については、次の質問をお勧めします。

2

通常、配列は強制的にスライスされますが、暗黙の変換はありません。

強制強制的に他のいくつかの方法があります。

b"hello" as &[u8] 
b"hello".borrow() 
関連する問題