2017-04-13 1 views
2

Ich versuche, eine Funktion zu machen, die T: Into<Vec<u8>> nimmt, aber wenn ich versuche, eine Reihe von u8 zu übergeben, ist es nicht zu kompilieren, selbst wenn From<&'a [T]>> implementiert von Vec:Konvertieren eine Referenz eines Arrays von U8 in eine <Vec<u8>>

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

ist hier mein Code

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

Antwort

4

Es funktioniert nicht, weil b"hello" Typ &[u8; 5] hat, die nicht Into<Vec<u8>> nicht implementiert. Sie benötigen eine &[u8] Scheibe passieren, um für sie zu kompilieren:

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

ich die folgende Frage nach einer Erklärung für den Unterschied zwischen einer Scheibe empfehlen und einem Array: What is the difference between Slice and Array?.

2

Arrays werden normalerweise zum Schneiden gezwungen, aber manchmal gibt es keine implizite Konvertierung.

Es gibt einige andere Möglichkeiten, einen Zwang zu erzwingen:

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