编辑:
请参阅本问题底部的完整答案.
tl;博士回答:Python有静态嵌套的范围.的静态 方面可以与隐变量声明相互作用,产生非显而易见的结果.
(这可能特别令人惊讶,因为语言通常具有动态性质).
我认为我对Python的范围规则有一个很好的处理,但是这个问题让我彻底陷入困境,而且我的google-fu让我失望了(不是我很惊讶 - 看看问题标题;)
我将从一些可以按预期工作的示例开始,但是可以自由地跳到示例4的多汁部分.
例1.
>>> x = 3
>>> class MyClass(object):
... x = x
...
>>> MyClass.x
3
Run Code Online (Sandbox Code Playgroud)
足够简单:在类定义期间,我们能够访问外部(在本例中为全局)范围中定义的变量.
例2.
>>> def mymethod(self):
... return self.x
...
>>> x = 3
>>> class MyClass(object):
... x = x
... mymethod = mymethod
...
>>> MyClass().mymethod()
3
Run Code Online (Sandbox Code Playgroud)
再次(忽略了为什么人们可能想要这样做),这里没有任何意外:我们可以访问外部范围中的函数.
注意:正如Frédéric在下面指出的那样,这个功能似乎不起作用.请参见示例5(及更高版本).
例3.
>>> def myfunc():
... x = 3
... class MyClass(object):
... x = x
... return MyClass
... …Run Code Online (Sandbox Code Playgroud) 我正在看一些C代码,并注意到它充满了围绕代码块的这些花括号,没有任何控制结构.看一看:
//do some stuff . . .
fprintf(stderr, "%.2f sec\n", (float)(clock() - t) / CLOCKS_PER_SEC);
{
//a block! why not?
char *tmp_argv[3];
tmp_argv[0] = argv[0]; tmp_argv[1] = str; tmp_argv[2] = prefix;
t = clock();
fprintf(stderr, "[bwa_index] Convert nucleotide PAC to color PAC... ");
bwa_pac2cspac(3, tmp_argv);
fprintf(stderr, "%.2f sec\n", (float)(clock() - t) / CLOCKS_PER_SEC);
}
Run Code Online (Sandbox Code Playgroud)
为什么要在代码中插入这样的块?它充满了它们.是否有某种性能优势?一些神秘的C事?为什么???
编辑:此代码来自BWA,这是一个生物信息学程序,使用Burrows-Wheeler变换将小序列与大型参考序列对齐,以防任何人想知道.此代码示例与应用程序的功能并不特别相关.
我在javascript中的普通类中有一个jquery类.是否可以从jquery类中的回调函数访问父类范围内的变量?
我的意思的一个简单示例如下所示
var simpleClass = function () {
this.status = "pending";
this.target = jqueryObject;
this.updateStatus = function() {
this.target.fadeOut("fast",function () {
this.status = "complete"; //this needs to update the parent class
});
};
};
Run Code Online (Sandbox Code Playgroud)
现在在上面的示例中,回调函数尝试访问jquery对象的范围.有没有办法访问父类中的状态变量?
我有一个A类,它有两个静态变量.我想用另一个不相关的静态变量初始化一个,就像这样:
#include <iostream>
class A
{
public:
static int a;
static int b;
};
int A::a = 200;
int a = 100;
int A::b = a;
int main(int argc, char* argv[])
{
std::cout << A::b << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是200.所以,谁能告诉我为什么?
这个问题是一个在问的赞助这个线程.
使用以下类定义:
template <class T>
class Foo {
public:
Foo (const foo_arg_t foo_arg) : _foo_arg(foo_arg)
{
/* do something for foo */
}
T Foo_T; // either a TypeA or a TypeB - TBD
foo_arg_t _foo_arg;
};
template <class T>
class Bar : public Foo<T> {
public:
Bar (const foo_arg_t bar_arg, const a_arg_t a_arg)
: Foo<T>(bar_arg) // base-class initializer
{
Foo<T>::Foo_T = T(a_arg);
}
Bar (const foo_arg_t bar_arg, const b_arg_t b_arg)
: Foo<T>(bar_arg)
{
Foo<T>::Foo_T = T(b_arg);
} …Run Code Online (Sandbox Code Playgroud) 我想在函数外部使用函数中定义的一堆局部变量.所以我传递x=locals()了返回值.
如何将该字典中定义的所有变量加载到函数外部的命名空间中,这样x['variable']我就可以简单地使用,而不是使用值来访问该值variable.
我看到了这两个短语的用法:全局范围和全局命名空间.他们之间有什么区别?
我在回调函数中引用我的对象时遇到了一些普通的旧JavaScript(没有框架)的问题.
function foo(id) {
this.dom = document.getElementById(id);
this.bar = 5;
var self = this;
this.dom.addEventListener("click", self.onclick, false);
}
foo.prototype = {
onclick : function() {
this.bar = 7;
}
};
Run Code Online (Sandbox Code Playgroud)
现在当我创建一个新对象时(在DOM加载后,使用span #test)
var x = new foo('test');
Run Code Online (Sandbox Code Playgroud)
onclick函数中的'this'指向span#test而不是foo对象.
如何在onclick函数中获取对foo对象的引用?
到目前为止,我只是把我所有的jQuery优点放在$(document).ready()函数中,包括在某些用户交互中使用的简单函数.
但是,不需要加载DOM文档或仅在事后调用的函数也可以放在外面$(document).ready().例如,考虑一个非常简单的验证函数,例如:
function hexvalidate(color) {
// Validates 3-digit or 6-digit hex color codes
var reg = /^(#)?([0-9a-fA-F]{3})([0-9a-fA-F]{3})?$/;
return reg.test(color);
}
Run Code Online (Sandbox Code Playgroud)
该函数仅在$(document).ready()函数内 调用.
什么是最佳实践(语法,速度); 在jquery文档就绪函数内部或外部放置这样的函数?
我试图让我的Chrome扩展程序在init()加载新页面时运行该功能,但我无法理解如何执行此操作.根据我的理解,我需要在background.html中执行以下操作:
chrome.tabs.onUpdated.addListener()来检查时,页面变更chrome.tabs.executeScript运行的脚本.这是我的代码:
//background.html
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
chrome.tabs.executeScript(null, {code:"init();"});
});
//script.js
function init() {
alert("It works!");
}
Run Code Online (Sandbox Code Playgroud)
我也想知道init()函数是否可以访问其他JS文件中的其他函数?
scope ×10
javascript ×4
c++ ×3
jquery ×2
namespaces ×2
python ×2
binding ×1
c ×1
callback ×1
class ×1
curly-braces ×1
events ×1
function ×1
inheritance ×1
locals ×1
name-lookup ×1
parent ×1
templates ×1
terminology ×1
variables ×1