标签: scope

PHP和C之间的可变范围差异:块范围不完全相同?

将输出以下PHP代码3.

function main() {
    if (1) {
        $i = 3;
    }
    echo $i;
}

main();
Run Code Online (Sandbox Code Playgroud)

但是下面的C代码会引发编译错误.

void main() {
    if (1) {
        int i = 3;
    }

    printf("%d", i);
}
Run Code Online (Sandbox Code Playgroud)

那么PHP中的变量不是严格的块范围的?在PHP中,内部块中定义的变量可以用在外部块中吗?

php c scope

37
推荐指数
1
解决办法
8667
查看次数

如何在Clojure中生成memoized递归函数?

我正在尝试编写一个在Clojure中返回memoized递归函数的函数,但是我在使递归函数看到它自己的memoized绑定时遇到了麻烦.这是因为没有创建var吗?另外,为什么我不能在用let创建的本地绑定上使用memoize?

这个稍微不同寻常的Fibonacci序列制作者从一个特定的数字开始就是我希望我能做的一个例子:

(defn make-fibo [y]
  (memoize (fn fib [x] (if (< x 2)
             y
             (+ (fib (- x 1))
                (fib (- x 2)))))))

(let [f (make-fibo 1)]
  (f 35)) ;; SLOW, not actually memoized
Run Code Online (Sandbox Code Playgroud)

使用with-local-vars似乎是正确的方法,但它对我也不起作用.我想我不能关闭vars?

(defn make-fibo [y]
  (with-local-vars [fib (fn [x] (if (< x 2)
                                  y
                                  (+ (@fib (- x 1))
                                     (@fib (- x 2)))))]
    (memoize fib)))

(let [f (make-fibo 1)]
  (f 35)) ;; Var null/null is unbound!?! 
Run Code Online (Sandbox Code Playgroud)

我当然可以手动编写一个宏来创建一个封闭的原子并自己管理memoization,但我希望没有这样的hackery这样做.

recursion closures scope clojure memoization

37
推荐指数
3
解决办法
4074
查看次数

Node.js变量声明和范围

当我在node.js中键入它时,我得到了undefined.

var testContext = 15;
function testFunction() {
  console.log(this.testContext);
}
testFunction();
=>undefined
Run Code Online (Sandbox Code Playgroud)

没有var关键字,它传递(=> 15).它在Chrome控制台中运行(有和没有var关键字).

javascript scope node.js

37
推荐指数
3
解决办法
7万
查看次数

程序编程是否比OOP有任何优势?

[编辑:]早些时候我问过这个问题可能是一个关于何时使用OOP与何时使用程序编程的错误框架问题 - 一些回复暗示我要求帮助理解OOP.相反,我经常使用OOP但想知道何时使用程序方法.从回答来看,我认为有一个相当强烈的共识,即OOP通常是一种更好的全方位方法,但如果OOP架构不能长期提供任何重用利益,则应该使用过程语言.

但是我作为Java程序员的经历却不然.我看到了一个庞大的Java程序,我用Perl大师重写了我编写的代码的1/10,看起来和我的OOP完美模型一样强大.我的架构看到了大量的重用,但更简洁的程序方法产生了一个卓越的解决方案.

所以,冒着重复自己的风险,我想知道在什么情况下我应该选择一个过程而不是面向对象的方法.您如何预先确定OOP架构可能过度杀伤并且程序方法更简洁高效的情况.

任何人都可以建议这些场景的样子吗?

什么是提前确定程序编程方法更好服务的项目的好方法?

oop scope procedural-programming object

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

绕过定义时如何使用变量?

在我看来,定义总是意味着存储分配.

在以下代码中,int i在程序堆栈上分配一个4字节(通常)存储并将其绑定到i,i = 3并将3分配给该存储.但是因为goto,定义被绕过,这意味着没有分配存储空间i.

我听说局部变量在函数的入口处(f()在这种情况下)分配在它们所在的位置,或者在定义点处.

但无论哪种方式,如何i在尚未定义的情况下使用它(根本没有存储空间)?执行时分配给值3的位置在哪里i = 3?

void f()
{
    goto label;
    int i;

label:
    i = 3;
    cout << i << endl; //prints 3 successfully
}
Run Code Online (Sandbox Code Playgroud)

c++ scope variable-declaration

36
推荐指数
4
解决办法
1038
查看次数

使用注释创建原型范围的Spring bean?

是否可以将以下XML配置转换为基于注释的配置?

<bean id="myBean" class="my.package.MyBeanClass" scope="prototype" />
Run Code Online (Sandbox Code Playgroud)

我正在使用Spring 2.5.6.

java spring scope annotations javabeans

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

document.ready中的全局javascript变量

哪种声明全局javascript变量的正确方法?我正在尝试它的方式不起作用

$(document).ready(function() {

    var intro;

    if ($('.intro_check').is(':checked')) {
        intro = true;
        $('.intro').wrap('<div class="disabled"></div>');
    };

    $('.intro_check').change(function(){
        if(this.checked) {
            intro = false;
            $('.enabled').removeClass('enabled').addClass('disabled');
        } else {
            intro = true;
            if($('.intro').exists()) {
                $('.disabled').removeClass('disabled').addClass('enabled'); 
            } else {
                $('.intro').wrap('<div class="disabled"></div>');
            }
        }
    });
});

console.log(intro);
Run Code Online (Sandbox Code Playgroud)

javascript jquery scope global-variables

36
推荐指数
4
解决办法
9万
查看次数

python exec()中的全局变量和本地变量

我正在尝试使用exec运行一段python代码.

my_code = """
class A(object):
  pass

print 'locals: %s' % locals()
print 'A: %s' % A

class B(object):
  a_ref = A
"""

global_env = {}
local_env = {}
my_code_AST = compile(my_code, "My Code", "exec")
exec(my_code_AST, global_env, local_env)

print local_env
Run Code Online (Sandbox Code Playgroud)

这导致以下输出

locals: {'A': <class 'A'>}
A: <class 'A'>
Traceback (most recent call last):
  File "python_test.py", line 16, in <module>
    exec(my_code_AST, global_env, local_env)
  File "My Code", line 8, in <module>
  File "My Code", line 9, in B
NameError: name 'A' is …
Run Code Online (Sandbox Code Playgroud)

python scope

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

Python:在其中的模块和类之间共享全局变量

我知道可以在Python中跨模块共享全局变量.但是,我想知道这可能的程度和原因.例如,

global_mod.py

x = None
Run Code Online (Sandbox Code Playgroud)

mid_access_mod.py

from global_mod import *

class delta:
    def __init__(self):
        print x
Run Code Online (Sandbox Code Playgroud)

bot_modif_mod.py

import mid_access_mod
import global_mod

class mew:
    def __init__(self):
        global_mod.x = 5

def main():
    m = mew()
    d = mid_access_mod.delta()
Run Code Online (Sandbox Code Playgroud)

即使所有模块共享全局变量x,也会打印None.为什么会这样?似乎x在mid_access_mod.py中被评估,然后由mew()在bot_modif_mod.py中分配.

python scope module global-variables

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

如何在try/except块public中创建一个变量?

如何在try/except块public中创建变量?

import urllib.request

try:
    url = "http://www.google.com"
    page = urllib.request.urlopen(url)
    text = page.read().decode('utf8')
except (ValueError, RuntimeError, TypeError, NameError):
    print("Unable to process your request dude!!")

print(text)
Run Code Online (Sandbox Code Playgroud)

此代码返回错误__CODE__.

如何在try/except块之外使变量文本可用?

python scope local-variables python-3.x try-except

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