标签: global-variables

你如何在Ruby中使用全局变量或常量值?

我有一个看起来像这样的程序:

$offset = Point.new(100, 200);

def draw(point)
  pointNew = $offset + point;
  drawAbsolute(point)
end

draw(Point.new(3, 4));
Run Code Online (Sandbox Code Playgroud)

使用$offset看起来有点怪异.

在C中,如果我在任何函数之外定义某些东西,它会自动成为一个全局变量.为什么在Ruby中它必须$offset但不可能offset并且仍然是全局的?如果是offset,那么它是本地的吗?但是本地到哪里,因为它感觉非常全球化.

是否有更好的方法来编写上面的代码?$offset起初使用可能看起来有点难看.


更新:我可以将此偏移量放在class定义中,但如果两个或多个类需要使用此常量呢?在这种情况下,我还需要定义一个$offset吗?

ruby global-variables

67
推荐指数
3
解决办法
12万
查看次数

在不使用全局变量的情况下从其他函数访问变量

我从各种各样的地方听说全局变量本质上是讨厌和邪恶的,但是当做一些非面向对象的Javascript时,我看不出如何避免它们.假设我有一个使用随机数和东西使用复杂算法生成数字的函数,但我需要在其他函数中继续使用该特定数字,这是一个回调或其他函数,因此不能成为同一函数的一部分.

如果最初生成的数字是局部变量,那么就无法访问它.如果函数是对象方法,我可以将数字作为属性,但它们不是,并且看起来有点过于复杂,以改变整个程序结构来执行此操作.全局变量真的如此糟糕吗?

javascript global-variables

65
推荐指数
5
解决办法
21万
查看次数

为什么分配给我的全局变量不适用于Python?

我在尝试理解python范围规则时遇到了麻烦.

使用以下脚本:

a = 7

def printA():
    print "Value of a is %d" % (a)

def setA(value):
    a = value
    print "Inside setA, a is now %d" %(a)


print "Before setA"
printA()
setA(42)
print "After setA"
printA()
Run Code Online (Sandbox Code Playgroud)

给出了意想不到的(对我来说)输出:

    Before setA
    Value of a is 7
    Inside setA, a is now 42
    After setA
    Value of a is 7

我希望最后一次打印a的值为42,而不是7.我对Python的全局变量范围规则缺少什么?

python scope global-variables

64
推荐指数
3
解决办法
6万
查看次数

如果"Utilities"类是邪恶的,我在哪里放置我的通用代码?

我通常遵循全局变量/函数是邪恶的规则,并且每一段代码都应该存在于它所属的类中.

这是一个非常容易遵循的规则,我相信到目前为止我还没有遇到过这条规则的问题.

然而,今天,我需要的功能添加到我的组装,而不是一个特定的类.也就是说,我的几乎所有类都可以用于这个特定的功能.

我应该把这个功能放在哪里(+1重载)?

如果我把它放在"公用事业"课程中,我会觉得很脏.如果我将它添加到一个半相关的类,并让其他类直接调用它,我会感觉更糟.

这段特殊的代码基本上是IList<PointF>一个规范化的列表.我觉得现在添加它作为扩展方法IList<PointF>可能是最好的选择...

c# oop global-variables utility-method

64
推荐指数
2
解决办法
2万
查看次数

Python中globals()的原因?

在Python中使用globals()函数的原因是什么?它只返回全局变量的字典,它们已经是全局的,所以它们可以在任何地方使用......我只是出于好奇,试图学习python.

def F():
    global x
    x = 1

def G():
    print(globals()["x"]) #will return value of global 'x', which is 1

def H():
    print(x) #will also return value of global 'x', which, also, is 1

F()
G()
H()
Run Code Online (Sandbox Code Playgroud)

我真的不明白这里的意思吗?只有我需要它的时候,如果我有本地和全局变量,两者都有相同的名称

def F():
    global x
    x = 1

def G():
    x = 5
    print(x) #5
    print(globals()["x"]) #1

F()
G()
Run Code Online (Sandbox Code Playgroud)

但是你应该永远不会遇到两个具有相同名称的变量,并且需要在同一范围内使用它们的问题.

python global global-variables

63
推荐指数
4
解决办法
8万
查看次数

为什么全局变量和静态变量初始化为默认值?

在C/C++中,为什么全局变量和静态变量初始化为默认值?

为什么不留下垃圾值呢?这有什么特别的原因吗?

c c++ static global-variables

61
推荐指数
4
解决办法
3万
查看次数

无法访问函数内的全局变量

这(我的代码的简化版)不起作用:

<?php
    $sxml = new SimpleXMLElement('<somexml/>');

    function foo(){
        $child = $sxml->addChild('child');
    }

    foo();
?>
Run Code Online (Sandbox Code Playgroud)

为什么?我想访问,$sxml因为我想在foo()失败时记录错误. foo()递归调用自己来创建一个目录列表,所以我担心将整体传递给$sxml自己(如同foo($sxml))可能会损害性能.

有没有办法进入$sxml内部$foo而不将其作为参数传递?(PHP 5.2.x +)

编辑:如果代码看起来像这样,实际上怎么办?

<?php
    bar(){
        $sxml = new SimpleXMLElement('<somexml/>');
        function foo(){
            $child = $sxml->addChild('child');
        }
        foo();
    }
    bar();
?>
Run Code Online (Sandbox Code Playgroud)

php variables scope global-variables

56
推荐指数
3
解决办法
9万
查看次数

检查全局变量是否存在的正确方法是什么?

JSLint未将此作为有效代码传递:

/* global someVar: false */
if (typeof someVar === "undefined") {
    var someVar = "hi!";
}
Run Code Online (Sandbox Code Playgroud)

什么是正确的方法?

javascript global-variables jslint

56
推荐指数
7
解决办法
4万
查看次数

node.js标准模块的全局变量?

我知道全局变量很糟糕.

但是,如果我使用节点的模块"UTIL"在我的框架40个文件,是不是更好,只是声明它像一个全局变量:

util = require('util');
Run Code Online (Sandbox Code Playgroud)

在index.js文件而不是在40个文件中写入该行?

因为我经常在每个文件中使用相同的5-10模块,这将节省大量的时间,而不是复制粘贴所有的时间.

在这种情况下DRY不好吗?

javascript module global-variables shared-libraries node.js

55
推荐指数
4
解决办法
6万
查看次数

我应该使用window.variable还是var?

我们有很多设置JS代码,用于定义将在许多其他JS文件中使用的面板,按钮等.

通常,我们会这样做:

grid.js

var myGrid = .....
Run Code Online (Sandbox Code Playgroud)

combos.js

var myCombo = .....
Run Code Online (Sandbox Code Playgroud)

然后,在我们的应用程序代码中,我们:

的application.js

function blah() {
    myGrid.someMethod()
}
Run Code Online (Sandbox Code Playgroud)

someother.js

function foo() {
    myCombo.someMethod();
    myGrid.someMethod();
}
Run Code Online (Sandbox Code Playgroud)

所以,我们应该使用var myGrid或更好地使用window.myGrid

有什么不同?

javascript global-variables

55
推荐指数
5
解决办法
4万
查看次数