如何在impl中(在Rust中)将变量从一个方法传递到另一个方法



具体问题

我需要将csv变量从load_csv函数传递到operations函数。

代码

use polars::{
prelude::{CsvReader, SerReader},
frame::DataFrame,
error::PolarsResult
};

struct Boilerplate {}

impl Boilerplate {
fn load_csv(&self) -> PolarsResult<DataFrame> {

let csv = CsvReader::from_path("microsoft stock data.csv")?
.has_header(true)
.finish();
// println!("{:?}", csv);
csv
}
fn operations() {
}
}

fn main() {
let boilercode = Boilerplate{};
println!("{:?}", boilercode.load_csv());
}

我试过的(但是,没用(

  1. main函数中声明了csv变量,然后尝试在impl中访问它

您可以这样做,将csv存储在Boilerplate的实例中。

struct Boilerplate {
csv: PolarsResult<DataFrame>
}
impl Boilerplate {
fn new() -> Boilerplate {
Boilerplate {
csv: CsvReader::from_path("microsoft stock data.csv")?
.has_header(true)
.finish();
}
fn operations(&self) {
// work with self.csv
}
}
fn main() {
let boilercode = Boilerplate::new()
println!("{:?}", boilercode.csv);
boilercode.operations()
}

它与您当前的实现有点不同,但我发现它更干净。它还让您可以自由地从其他方法调用impl方法,同时在实例中保留csv数据。像这样:

impl Boilerplate {
// --snip--
fn process(&self) {
self.operations()
}
fn operations(&self) {
// work with self.csv
}
}

最新更新