csv - 尝试写入 CSV 记录时出现错误 "the trait ` std::convert::AsRef<[u8] >` is not implemented for ` u 8`"

标签 csv rust

这是一个最小的重现:

extern crate csv;
use std::fs::File;
use std::io::Write;

fn do_write(writer: &mut csv::Writer<File>, buf: &[u8]) {
    // The error is coming from this line
    writer.write_record(buf);
}

fn main() {
    let mut writer = csv::Writer::from_path(r"c:\temp\file.csv").unwrap();
    let str = "Hello, World!".to_string();
    do_write(&mut writer, str.as_bytes());
}

导致编译错误:

error[E0277]: the trait bound `u8: std::convert::AsRef<[u8]>` is not satisfied
 --> src/main.rs:7:16
  |
7 |         writer.write_record(buf);
  |                ^^^^^^^^^^^^ the trait `std::convert::AsRef<[u8]>` is not implemented for `u8`
  |
  = note: required because of the requirements on the impl of `std::convert::AsRef<[u8]>` for `&u8`

这个错误是什么意思?看来我已经传递了一个 u8 切片?

最佳答案

检查 write_record 的签名:

fn write_record<I, T>(&mut self, record: I) -> Result<()> 
where
    I: IntoIterator<Item = T>,
    T: AsRef<[u8]>, 

它期望某些东西可以成为值的迭代器。您正在提供 &[u8] ,它一个迭代器,但只有&u8值。错误是这些 &u8 s 不执行 AsRef<[u8]> .

您可以将单个传入的字符串包装在另一个数组中以创建可以充当迭代器的东西:

writer.write_record(&[buf]);

关于csv - 尝试写入 CSV 记录时出现错误 "the trait ` std::convert::AsRef<[u8] >` is not implemented for ` u 8`",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47016911/

相关文章:

python - Pandas dataframe.to_csv 文件行彼此不对齐

rust - 为什么 Cargo 会为同一个注册表创建多个目录?

csv - 带有 CSV 的 Grails(无数据库)

iphone - 摄氏度符号问题 - Objective-C

rust - 错误[E0277] : the trait bound `Vec<TokenStream2>: ToTokens` is not satisfied

rust - 当我需要引用自身时如何设计结构

rust - 避免同时借用可变的和不变的

rust - 暗示AsyncRead为补品::流

python - 将 CSV 文件转换为 xlsx 文件 Python

javascript - 将 CSV 数据解析为 JS 对象以在图表中使用。 Uncaught ReferenceError : data is not defined(jsfiddle included)