我正在学习Rust,并决定使用Polars框架,并得到一些我无法理解的错误.这段代码只是为了创建一个嵌套框架,然后添加一个新列作为两个现有列的总和:

fn main() {

    let _df = DataFrame::default();

    let df= df!(
        "a" => &[1, 2, 3, 4],
        "b" => &[2, 3, 4, 5],
    );

    println!("{:#?}", df);
    
    let df = df.lazy()
        .with_column(
            col("a") + col("b"),
            "c"
        )
        .collect()
        .unwrap();
}

它在调用lazy()方法时失败:

error[E0599]: no method named `lazy` found for enum `Result` in the current scope
  --> src/bin/dataframes.rs:16:17
   |
16 |     let df = df.lazy()
   |                 ^^^^ method not found in `Result<DataFrame, PolarsError>`
   |
note: the method `lazy` exists on the type `polars::prelude::DataFrame`
  --> /usr/local/cargo/registry/src/index.crates.io-6f17d22bba15001f/polars-lazy-0.35.4/src/frame/mod.rs:45:5
   |
45 |     fn lazy(self) -> LazyFrame;
   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^
help: consider using `Result::expect` to unwrap the `polars::prelude::DataFrame` value, panicking if the value is a `Result::Err`

我看到编译器给了我一些可能有用的建议,但我不知道如何或在哪里使用Result::expect来解包Dataframe值.

我知道out可能是一个DataFrame或一个错误,所以我需要在这里添加一些match构造吗?

EDIT个 好吧,我知道该怎么做了,但我很困惑,因为我在官方文档中没有看到任何这一点:

    let df = df.expect("").lazy()
        .with_column(
            (col("a") + col("b")).alias("c")
        )
        .collect()
        .unwrap();

推荐答案

polars lazy documentation

官方文件确实说df!个宏需要解包.不过,这也解释不了为什么.

下面是文档中的示例代码:

 let df = df! {
     "column_a" => &[1, 2, 3, 4, 5],
     "column_b" => &["a", "b", "c", "d", "e"]
 }.unwrap();

有关Result型号的更多说明,您应该查看official rust book.

简单解释一下:当像df!这样的函数或宏求值为错误时,返回Result<T, E>类型.ENUM Result用于表示这一点.用户必须用match或其他方法处理这两种可能性.

result.expect("error message")result.unwrap()用于直接从Result::Ok(T)中提取T,如果结果值为Result::Err(E),则使程序崩溃.这样做通常是为了在开发过程中方便,但不建议在发布时使用.

Rust相关问答推荐

重新导出proc宏导致未解决的extern crate错误""

如何从接收&;self的方法克隆RC

Rust:跨多个线程使用hashmap Arc和rwlock

具有对同一类型的另一个实例的可变引用的

为什么std repeat trait绑定在impl块和关联函数之间?

获取字符串切片(&;str)上的切片([ia..ib])返回字符串

如何高效地将 struct 向量中的字段收集到单独的数组中

为什么这个变量不需要是可变的?

在Rust 中移动原始指针的靶子安全吗

从管道读取后重置标准输入

Rust ECDH 不会产生与 NodeJS/Javascript 和 C 实现相同的共享密钥

如何正确使用git2::Remote::push?

如何在 Rust 中按 char 对字符串向量进行排序?

Rust 中函数的类型同义词

是否有适当的方法在参考 1D 中转换 2D 数组

通用函数中的生命周期扣除和borrow (通用测试需要)

C++ 中的 CRTP 是一种表达其他语言中特征和/或 ADT 的方法吗?

Rust:为什么在 struct 中borrow 引用会borrow 整个 struct?

令人困惑的错误消息? (解包运算符)

来自外部函数的future 内部可变引用