我有一个看起来像这样的程序:
$offset = Point.new(100, 200);
def draw(point)
  pointNew = $offset + point;
  drawAbsolute(point)
end
draw(Point.new(3, 4));
使用$offset看起来有点怪异.
在C中,如果我在任何函数之外定义某些东西,它会自动成为一个全局变量.为什么在Ruby中它必须$offset但不可能offset并且仍然是全局的?如果是offset,那么它是本地的吗?但是本地到哪里,因为它感觉非常全球化.
是否有更好的方法来编写上面的代码?$offset起初使用可能看起来有点难看.
更新:我可以将此偏移量放在class定义中,但如果两个或多个类需要使用此常量呢?在这种情况下,我还需要定义一个$offset吗?
我从各种各样的地方听说全局变量本质上是讨厌和邪恶的,但是当做一些非面向对象的Javascript时,我看不出如何避免它们.假设我有一个使用随机数和东西使用复杂算法生成数字的函数,但我需要在其他函数中继续使用该特定数字,这是一个回调或其他函数,因此不能成为同一函数的一部分.
如果最初生成的数字是局部变量,那么就无法访问它.如果函数是对象方法,我可以将数字作为属性,但它们不是,并且看起来有点过于复杂,以改变整个程序结构来执行此操作.全局变量真的如此糟糕吗?
我在尝试理解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()
给出了意想不到的(对我来说)输出:
    Before setA
    Value of a is 7
    Inside setA, a is now 42
    After setA
    Value of a is 7
我希望最后一次打印a的值为42,而不是7.我对Python的全局变量范围规则缺少什么?
我通常遵循全局变量/函数是邪恶的规则,并且每一段代码都应该存在于它所属的类中.
这是一个非常容易遵循的规则,我相信到目前为止我还没有遇到过这条规则的问题.
然而,今天,我需要的功能添加到我的组装,而不是一个特定的类.也就是说,我的几乎所有类都可以用于这个特定的功能.
我应该把这个功能放在哪里(+1重载)?
如果我把它放在"公用事业"课程中,我会觉得很脏.如果我将它添加到一个半相关的类,并让其他类直接调用它,我会感觉更糟.
这段特殊的代码基本上是IList<PointF>一个规范化的列表.我觉得现在添加它作为扩展方法IList<PointF>可能是最好的选择...
在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()
我真的不明白这里的意思吗?只有我需要它的时候,如果我有本地和全局变量,两者都有相同的名称
def F():
    global x
    x = 1
def G():
    x = 5
    print(x) #5
    print(globals()["x"]) #1
F()
G()
但是你应该永远不会遇到两个具有相同名称的变量,并且需要在同一范围内使用它们的问题.
在C/C++中,为什么全局变量和静态变量初始化为默认值?
为什么不留下垃圾值呢?这有什么特别的原因吗?
这(我的代码的简化版)不起作用:
<?php
    $sxml = new SimpleXMLElement('<somexml/>');
    function foo(){
        $child = $sxml->addChild('child');
    }
    foo();
?>
为什么?我想访问,$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();
?>
JSLint未将此作为有效代码传递:
/* global someVar: false */
if (typeof someVar === "undefined") {
    var someVar = "hi!";
}
什么是正确的方法?
我知道全局变量很糟糕.
但是,如果我使用节点的模块"UTIL"在我的框架40个文件,是不是更好,只是声明它像一个全局变量:
util = require('util');
在index.js文件而不是在40个文件中写入该行?
因为我经常在每个文件中使用相同的5-10模块,这将节省大量的时间,而不是复制粘贴所有的时间.
在这种情况下DRY不好吗?
我们有很多设置JS代码,用于定义将在许多其他JS文件中使用的面板,按钮等.
通常,我们会这样做:
grid.js
var myGrid = .....
combos.js
var myCombo = .....
然后,在我们的应用程序代码中,我们:
的application.js
function blah() {
    myGrid.someMethod()
}
someother.js
function foo() {
    myCombo.someMethod();
    myGrid.someMethod();
}
所以,我们应该使用var myGrid或更好地使用window.myGrid
有什么不同?