我知道一般来说,应避免使用全局变量.尽管如此,我认为在实际意义上,有时需要(在变量是程序不可或缺的情况下)使用它们.
为了学习Rust,我目前正在使用sqlite3和GitHub上的Rust/sqlite3包编写数据库测试程序.因此,这需要(在我的测试程序中)(作为全局变量的替代),在大约有十几个函数之间传递数据库变量.一个例子如下.
在Rust中使用全局变量是否可行,可行和可取?
鉴于以下示例,我可以声明并使用全局变量吗?
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 …我们都知道全局变量不是最佳实践.但有几个例子,没有它们很难编码.您使用什么技术来避免使用全局变量?
例如,给定以下场景,您将如何使用全局变量?
JavaScript代码:
var uploadCount = 0;
window.onload = function() {
    var frm = document.forms[0];
    frm.target = "postMe";
    frm.onsubmit = function() {
        startUpload();
        return false;
    }
}
function startUpload() {
    var fil = document.getElementById("FileUpload" + uploadCount);
    if (!fil || fil.value.length == 0) {
        alert("Finished!");
        document.forms[0].reset();
        return;
    }
    disableAllFileInputs();
    fil.disabled = false;
    alert("Uploading file " + uploadCount);
    document.forms[0].submit();
}
相关标记:
<iframe src="test.htm" name="postHere" id="postHere"
  onload="uploadCount++; if(uploadCount > 1) startUpload();"></iframe>
<!-- MUST use inline JavaScript here for onload event
     to …我正在尝试将变量传递给包含文件.我的主机改变了PHP版本,现在无论我尝试什么解决方案都行不通.
我想我已经尝试了所有可以找到的选项.我确定这是最简单的事情!
需要从调用的第一个文件设置和评估变量(它实际上是$_SERVER['PHP_SELF'],并且需要返回该文件的路径,而不是包含的文件second.php).
选项一
在第一个文件中:
global $variable;
$variable = "apple";
include('second.php');
在第二个文件中:
echo $variable;
选项二
在第一个文件中:
function passvariable(){
    $variable = "apple";
    return $variable;
}
passvariable();
选项三
$variable = "apple";
include "myfile.php?var=$variable"; // and I tried with http: and full site address too.
$variable = $_GET["var"]
echo $variable
这些都不适合我.PHP版本是5.2.16.
我错过了什么?
谢谢!
编译此代码时,我得到错误"初始化元素不是编译时常量".有谁能解释为什么?
#import "PreferencesController.h"
@implementation PreferencesController
- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }
    return self;
}
NSImage* imageSegment = [[NSImage alloc] initWithContentsOfFile:@"/User/asd.jpg"];//error here
cocoa compiler-errors initialization global-variables objective-c
在我的项目中,我们有一些全局变量作为容器:
MyProject.MyFreature.someFunction = function() { ... }
那么我在整个网站上使用该脚本,JSLint/JSHint抱怨:
"MyProject"未定义
我知道我可以访问每个JavaScript文件并在其/*global MyProject*/上添加注释.但我正在寻找一种方法来在某种配置文件中定义该注释,所以我不必逐个文件添加此注释.
选择中的某种选择config/jshint.yml会很好.
我已经读过全局变量都不好的地方,应该使用替代方案.在Javascript中,我应该选择什么解决方案.
我正在考虑一个函数,当有两个arguments(function globalVariables(Variable,Value))时,看看Variable是否存在于一个本地数组中,并且它是否将它的值设置为Value,else,Variable并被Value追加.如果在没有arguments(function globalVariables())的情况下调用该函数,则返回该数组.也许如果仅使用一个参数(function globalVariables(Variable))触发该函数,它将返回Variable数组中的值.
你怎么看?我想听听你使用全局变量的替代解决方案和论据.
globalVariables();function append(){
    globalVariables("variable1","value1"); //globalVariables() would append variable1 to it's local array.
};
function retrieve(){
    var localVariable1 = globalVariables("variable1"); //globalVariables() would return "value1".
};
function retrieveAll(){
    var localVariable1 = globalVariables(); //globalVariables() would return the globalVariable()'s entire, local [persistently stored between calls] array.
};
function set(){
    globalVariables("variable1","value2"); //globalVariables() would set variable1 to "value2".
};
这是Singleton Pattern BTW吗? …
如何在ASP.NET MVC中声明全局变量?
根据我的参考,基本类型具有默认值,对象为空.我测试了一段代码.
public class Main {
    public static void main(String[] args) {
        int a;
        System.out.println(a);
    }
}
该行将System.out.println(a);是指向变量的错误a,variable a might not have been initialized而在给定的引用中,该变量integer将具有0默认值.但是,使用下面给出的代码,它实际上会打印出来0.
public class Main {
    static int a;
    public static void main(String[] args) {
        System.out.println(a);
    }
}
第一个代码可能出现什么问题?类实例变量的行为是否与局部变量不同?
java initialization global-variables local-variables default-value
如何与线程共享全局变量?
我的Python代码示例是:
from threading import Thread
import time
a = 0  #global variable
def thread1(threadname):
    #read variable "a" modify by thread 2
def thread2(threadname):
    while 1:
        a += 1
        time.sleep(1)
thread1 = Thread( target=thread1, args=("Thread-1", ) )
thread2 = Thread( target=thread2, args=("Thread-2", ) )
thread1.join()
thread2.join()
我不知道如何让两个线程共享一个变量.
我有一个创建数组的函数,我想将数组返回给调用者:
create_array() {
  local my_list=("a", "b", "c")
  echo "${my_list[@]}"
}
my_algorithm() {
  local result=$(create_array)
}
有了这个,我只得到一个扩展的字符串.如何在不使用全局的情况下"返回"my_list?
global-variables ×10
javascript ×3
.net ×1
arrays ×1
asp.net ×1
asp.net-mvc ×1
bash ×1
c# ×1
cocoa ×1
global ×1
include ×1
java ×1
jshint ×1
jslint ×1
objective-c ×1
php ×1
python ×1
rust ×1
variables ×1