मुझे पता है कि सामान्य रूप से, वैश्विक-चर से बचा जाना चाहिए। फिर भी, मुझे लगता है कि व्यावहारिक अर्थ में, कभी-कभी वांछनीय होता है (परिस्थितियों में जहां चर प्रोग्राम के अभिन्न अंग होते हैं) उनका उपयोग करने के लिए।जंग में वैश्विक चर का उपयोग करना संभव है?
जंग सीखने के लिए, मैं वर्तमान में sqlite3 और गिटहब पर जंग/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) {
| ^^^^
एक ** सुरक्षित ** समाधान के लिए, कृपया [मैं कैसे एक वैश्विक बनाऊँ देखें: यह उपयोगकर्ता इनपुट पर निर्भर करता है, आप भी वहाँ में
Option
फेंकने के लिए, जिस स्थिति यह थोड़ा बोझल हो जाता है तक पहुँचने में हो सकता है , परिवर्तनीय सिंगलटन?] (http://stackoverflow.com/q/27791532/155423)। 'Static mut' विकल्प के साथ – Shepmaster