मुझे पता है कि सामान्य तौर पर, वैश्विक-चर से बचा जाना चाहिए। फिर भी, मैं एक व्यावहारिक अर्थ में सोचता हूं, यह कभी-कभी वांछनीय होता है (उन स्थितियों में जहां चर प्रोग्राम का अभिन्न अंग है) उनका उपयोग करने के लिए।
जंग को सीखने के लिए, मैं वर्तमान में sqlite3 और GitHub पर Rust / sqlite3 पैकेज का उपयोग करके एक डेटाबेस परीक्षण कार्यक्रम लिख रहा हूं। नतीजतन, यह आवश्यक है (मेरे परीक्षण-कार्यक्रम में) (एक वैश्विक चर के विकल्प के रूप में), डेटाबेस चर को पारित करने के लिए जिसमें लगभग एक दर्जन हैं। एक उदाहरण नीचे है।
क्या यह संभव है और जंगम में वैश्विक चर का उपयोग करने के लिए संभव और वांछनीय है?
नीचे दिए गए उदाहरण को देखते हुए, क्या मैं एक वैश्विक चर घोषित और उपयोग कर सकता हूं?
extern crate sqlite;
fn main() {
let db: sqlite::Connection = open_database();
if !insert_data(&db, insert_max) {
return;
}
}
मैंने निम्नलिखित की कोशिश की, लेकिन यह बिल्कुल सही प्रतीत नहीं होता है और इसके परिणामस्वरूप नीचे त्रुटियां हुईं (मैंने एक unsafe
ब्लॉक के साथ भी कोशिश की ):
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) {
| ^^^^
Connection
एक Option<Connection>
प्रकार के स्टोर करने की कोशिश के साथ करना है , और एक के Option<Connection>
रूप में उपयोग करने की कोशिश करना है Connection
। यदि उन त्रुटियों को हल किया गया था (उपयोग करके Some()
) और उन्होंने एक unsafe
ब्लॉक का उपयोग किया , जैसा कि उन्होंने मूल रूप से कोशिश की थी, उनका कोड काम करेगा (यद्यपि थ्रेड-असुरक्षित तरीके से)।