如何解决Serde的反序列化方法如何推断类型?
我在Rust CSV板条箱的教程页面上遵循一些代码示例,而该教程没有解释其工作原理:
type Record = HashMap<String,String>;
fn csv_to_record_table() -> Result<Vec<Record>,Box<dyn Error>> {
let mut rdr = csv::Reader::from_path(r"h:\code\rust\csvtutorial\uspop.csv")?;
let mut sheet = Vec::<Record>::new();
for result in rdr.deserialize() {
let record = result?;
sheet.push(record);
}
Ok(sheet)
}
我的代码有效,因此不需要修复,但是我想了解的是rdr.deserialize()
如何推断出我想要的类型是HashMap<String,String>
。我从文档中得知,如果您将其传递给哈希表,则它将使用列名作为键,并使用字段数据作为值。
我不明白的是rdr.deserialize()
如何知道这就是我在没有将我改写为rdr.deserialize::<Record>()
的情况下要做的。这是Rust的功能吗?还是这是Serde特有的?它怎么还知道我不是要给它一个Vec<Record>
?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。