【问题标题】:How to use common BTreeMap variable in rust如何在 Rust 中使用常见的 BTreeMap 变量
【发布时间】:2022-11-18 02:44:06
【问题描述】:

这是我原来的简化代码,我想使用全局变量而不是单独函数中的变量。生锈的建议方法是什么? 顺便说一句,我试过使用全局参数或更改函数参数,这对初学者来说都是噩梦。很难解决生命周期和变量类型转换问题。

use std::collections::BTreeMap;

// Trying but failed
// let mut guess_number = BTreeMap::new();
//  | ^^^ expected item

fn read_csv() {
    let mut guess_number = BTreeMap::new();

    let lines = ["Tom,4", "John,6"];
    for line in lines.iter() {
        let split = line.split(",");
        let vec: Vec<_> = split.collect();
        println!("{} {:?}", line, vec);
        let number: u16 = vec[1].trim().parse().unwrap();
        guess_number.insert(vec[0], number);
    }
    for (k, v) in guess_number {
        println!("{} {:?}", k, v);
    }
}
fn main() {
    let mut guess_number = BTreeMap::new();
    guess_number.insert("Tom", 3);
    guess_number.insert("John", 7);
    if guess_number.contains_key("John") {
        println!("John's number={:?}", guess_number.get("John").unwrap());
    }

    read_csv();
}

【问题讨论】:

标签: rust


【解决方案1】:

这个问题并不特定于BTreeMaps,而是针对几乎所有数据类型,例如数字、字符串、向量、枚举等。

如果你想经过从一个函数到另一个函数的变量(值),你可以在 Rust 中以各种方式做到这一点。通常你要么移动该值或您传递对它的引用。移动是 Rust 及其特有的东西所有权模型。这真的很重要,所以如果你有认真学习 Rust 的意愿,我强烈建议你阅读“本书”中的章节Understanding Ownership。如果您从一次阅读中无法理解它,请不要气馁。根据需要花费尽可能多的时间,因为没有这些知识你真的无法前进。

至于全局变量,应该用到的情况很少。与大多数其他语言相比,在 Rust 中使用全局变量稍微困难一些。 This thread 很有用,虽然你可能会觉得有点难以理解。我对初学者的建议是首先充分理解移动和传递引用的基本概念。

【讨论】:

    猜你喜欢
    • 2022-01-25
    • 1970-01-01
    • 2023-03-16
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 2017-09-04
    相关资源
    最近更新 更多