Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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 serialize::Decodable未为类型`&;实现;str`_Rust - Fatal编程技术网

Rust serialize::Decodable未为类型`&;实现;str`

Rust serialize::Decodable未为类型`&;实现;str`,rust,Rust,我有一个我希望能够从json解码的结构: #[derive(RustcDecodable)] struct MyStruct<'a> { aa: Option<&'a str>, bb: Option<u64>, } 这是为什么?如何修复它?如果您查看的文档,您可以看到可以解码到的所有基本类型的列表。您会注意到&str不在列表中。这是您错误的根本原因 仔细阅读该列表可以发现,您永远无法解码为借用的类型。如果可以对字符串片段进行解码,那么解码后

我有一个我希望能够从json解码的结构:

#[derive(RustcDecodable)]
struct MyStruct<'a> {
  aa: Option<&'a str>,
  bb: Option<u64>,
}

这是为什么?如何修复它?

如果您查看的文档,您可以看到可以解码到的所有基本类型的列表。您会注意到
&str
不在列表中。这是您错误的根本原因

仔细阅读该列表可以发现,您永远无法解码为借用的类型。如果可以对字符串片段进行解码,那么解码后的结构将永远与输入字符串的生命周期相关联,并且很可能整个类别的解码器都将变得不可能——想象一下直接从文件或网络流读取的解码器,其中整个输入数据永远不会在内存中完全读取

要修复此问题,请切换结构以拥有数据:

#[derive(RustcDecodable)]
struct MyStruct {
    aa: Option<String>,
    bb: Option<u64>,
}

如果您查阅了的文档,您可以看到可以解码到的所有基本类型的列表。您会注意到
&str
不在列表中。这是您错误的根本原因

仔细阅读该列表可以发现,您永远无法解码为借用的类型。如果可以对字符串片段进行解码,那么解码后的结构将永远与输入字符串的生命周期相关联,并且很可能整个类别的解码器都将变得不可能——想象一下直接从文件或网络流读取的解码器,其中整个输入数据永远不会在内存中完全读取

要修复此问题,请切换结构以拥有数据:

#[derive(RustcDecodable)]
struct MyStruct {
    aa: Option<String>,
    bb: Option<u64>,
}

你试过使用serde吗?那么,为什么要使用rustcdecoable而不是decoable呢?请注意,Rust样式是4-空格缩进。@llogiq,因为在他们使用的文档中it@AlexanderSupertramp不在我上面链接的serde文档中。但这并不重要。事实上,查看自动-
派生
处理代码,两者都是同义词。您尝试过使用serde吗?那么,为什么要使用rustcdecoable而不是decoable呢?请注意,Rust样式是4-空格缩进。@llogiq,因为在他们使用的文档中it@AlexanderSupertramp不在我上面链接的serde文档中。但这并不重要。事实上,查看自动派生处理代码,两者都是同义词。
#[derive(RustcDecodable)]
struct MyStruct<'a> {
    aa: Option<Cow<'a, str>>,
    bb: Option<u64>,
}