gpt4 book ai didi

global-variables - 是否可以在 Rust 中使用全局变量?

转载 作者:行者123 更新时间:2023-11-29 07:40:02 41 4
gpt4 key购买 nike

我知道一般来说,要避免使用全局变量。尽管如此,我认为在实际意义上,有时(在变量是程序不可或缺的情况下)使用它们是可取的。

为了学习 Rust,我目前正在使用 sqlite3 和 GitHub 上的 Rust/sqlite3 包编写一个数据库测试程序。因此,这需要(在我的测试程序中)(作为全局变量的替代方法)在大约有十几个函数之间传递数据库变量。下面是一个例子。

  1. 在 Rust 中使用全局变量是否可能、可行和可取?

  2. 给出下面的例子,我可以声明和使用一个全局变量吗?

extern crate sqlite;

fn main() {
let db: sqlite::Connection = open_database();

if !insert_data(&db, insert_max) {
return;
}
}

我尝试了以下方法,但它似乎不太正确并导致了以下错误(我也尝试了 unsafe block ):

extern crate sqlite;

static mut DB: Option<sqlite::Connection> = None;

fn main() {
DB = sqlite::open("test.db").expect("Error opening test.db");
println!("Database Opened OK");

create_table();
println!("Completed");
}

// Create Table
fn create_table() {
let sql = "CREATE TABLE IF NOT EXISTS TEMP2 (ikey INTEGER PRIMARY KEY NOT NULL)";
match DB.exec(sql) {
Ok(_) => println!("Table created"),
Err(err) => println!("Exec of Sql failed : {}\nSql={}", err, sql),
}
}

编译产生的错误:

error[E0308]: mismatched types
--> src/main.rs:6:10
|
6 | DB = sqlite::open("test.db").expect("Error opening test.db");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected enum `std::option::Option`, found struct `sqlite::Connection`
|
= note: expected type `std::option::Option<sqlite::Connection>`
found type `sqlite::Connection`

error: no method named `exec` found for type `std::option::Option<sqlite::Connection>` in the current scope
--> src/main.rs:16:14
|
16 | match DB.exec(sql) {
| ^^^^

最佳答案

可以,但是不允许直接堆分配。堆分配在运行时执行。下面是几个例子:

static SOME_INT: i32 = 5;
static SOME_STR: &'static str = "A static string";
static SOME_STRUCT: MyStruct = MyStruct {
number: 10,
string: "Some string",
};
static mut db: Option<sqlite::Connection> = None;

fn main() {
println!("{}", SOME_INT);
println!("{}", SOME_STR);
println!("{}", SOME_STRUCT.number);
println!("{}", SOME_STRUCT.string);

unsafe {
db = Some(open_database());
}
}

struct MyStruct {
number: i32,
string: &'static str,
}

关于global-variables - 是否可以在 Rust 中使用全局变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19605132/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com