Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 转换向量<;奶牛<',[u8]>;至&;str_Rust - Fatal编程技术网

Rust 转换向量<;奶牛<',[u8]>;至&;str

Rust 转换向量<;奶牛<',[u8]>;至&;str,rust,Rust,lib(quick_xml)函数(attributes())返回一个类型为Vec的值。您可以使用std::str::from_utf8将和[u8]错误转换为&str: use std::borrow::Cow; fn main() { let s = "test"; let v = s.as_bytes(); let c = Cow::Borrowed(v); println!("{}", std::str::from_u

lib(quick_xml)函数(attributes())返回一个类型为
Vec的值。您可以使用
std::str::from_utf8
和[u8]
错误转换为
&str

use std::borrow::Cow;

fn main() {
    let s = "test";
    let v = s.as_bytes();
    let c = Cow::Borrowed(v);
    println!("{}", std::str::from_utf8(&*c).unwrap());
}
关键部分是对
Cow
的删除和重新加载,因为
from_utf8
采用
和[u8]
而不是
Cow
Cow
T
执行
Deref
,在这种情况下
T
[u8]
,因此您可以通过
和*
获得
和[u8]

在您的具体示例中,您应该能够通过以下方式获得
Vec

e.attributes().map(|a| std::str::from_utf8(&*a.unwrap().value).unwrap()).collect::<Vec<_>>()
e.attributes()

我假设您正在引用。在将来,请给我们完整的源代码-这使回答这个问题更容易


理解代码 让我们一步一步来:

  • 这是。它返回表示一个标记具有的属性集的值。在您的例子中,这只是一个属性:它有名称
    attr1
    和值
    test

    ,这意味着您可以在包含的s上进行迭代(请注意,包含多个s–它们不是同一类型!)。如果您想了解有关迭代器的更多信息,您可能需要阅读

  • 这个迭代器接受一个名为
    a
    的参数,正如我上面所说的,它是原始迭代器包含的类型。我在上面说过,
    属性
    包含多个
    属性
    s–虽然这是真的,但它不是全貌,迭代器迭代包含
    属性
    结果,但是如果XML以某种方式无效,
    a
    也可能表示某种解析错误。我们不想关心这里的错误处理,所以我们只调用它,返回包含的
    参数
    ,如果出现错误,它会惊慌失措


  • 属性
    结构包含两个值:和[
    ]。我们只对
    value
    感兴趣,所以让我们选择它。
    value
    字段的类型为
    cow。根据您的描述,很难理解您正在尝试做什么。许多生锈类型实现了to_string()方法。也许你可以试试。请注意,你可能不想使用
    &str
    ,而是想使用
    字符串
    ,因为当原始
    Vec
    超出范围时,前者不可能存在。
    e.attributes().map(|a| a.unwrap().value).collect::<Vec<_>>()
    ^
    
    e.attributes().map(|a| a.unwrap().value).collect::<Vec<_>>()
      ^^^^^^^^^^^^
    
    e.attributes().map(|a| a.unwrap().value).collect::<Vec<_>>()
                   ^^^^^^^^^^^^^^^^^^^^^^^^^
    
    |a| a.unwrap().value
    ^^^
    
    |a| a.unwrap().value
        ^^^^^^^^^^
    
    |a| a.unwrap().value
                   ^^^^^
    
    e.attributes().map(|a| a.unwrap().value).collect::<Vec<_>>()
                                             ^^^^^^^^^^^^^^^^^^^
    
    e.attributes().map(|a| a.unwrap().unescape_and_decode_value(&reader).unwrap()).collect::<Vec<_>>()