我刚读完R简介中的范围界定,对这项<<-任务非常好奇.
手册显示了一个(非常有趣)的例子<<-,我觉得我理解.我仍然缺少的是这可能有用的背景.
因此,我希望从您那里读到的是关于何时使用<<-可能有趣/有用的示例(或示例链接).使用它的危险可能是什么(它看起来容易松散),以及您可能想要分享的任何提示.
我刚刚阅读了一篇关于Ben Cherry的JavaScript范围和提升的精彩文章,其中他给出了以下示例:
var a = 1;
function b() {
    a = 10;
    return;
    function a() {}
}
b();
alert(a);
使用上面的代码,浏览器将发出"1"警报.
我仍然不确定它为什么会返回"1".他说的一些事情就像是:所有的功能声明都被提升到顶部.您可以使用函数来调整变量的范围.仍然没有为我点击.
是否存在任何用于浏览器内javascript的库,它们提供与Node相同的灵活性/模块性/易用性require?
提供更多细节:原因require很好,它是:
jQuery.ajax()var dsp = require("dsp.js");我将能够访问dsp.FFT,这不会干扰我的本地var FFT我还没有找到一个能够有效地完成这项工作的库.我倾向于使用的解决方法是:
coffeescript-concat - 它很容易需要其他js,但你必须编译它,这意味着它不太适合快速开发(例如构建API in-test)
RequireJS - 它是流行的,直截了当的,并解决了1-3,但缺乏范围是一个真正的交易破坏者(我相信head.js是相似的,因为它缺乏范围,虽然我从来没有任何机会使用它.类似地,LABjs可以加载并.wait()确实缓解依赖性问题,但它仍然没有确定范围)
据我所知,似乎有许多解决方案用于javascript的动态和/或异步加载,但它们往往具有与从HTML加载js相同的范围问题.最重要的是,我想要一种加载不会污染全局命名空间的javascript的方法,但仍允许我加载和使用库(就像节点的要求一样).
编辑(我的答案):自写这篇文章以来,我已广泛使用RequireJS(现在有更清晰的文档).在我看来,RequireJS确实是正确的选择.我想澄清一下系统如何适用于那些和我一样困惑的人:
您可以require在日常开发中使用.模块可以是函数返回的任何内容(通常是对象或函数),并且作为参数确定范围.您还可以将项目编译为单个文件以进行部署r.js(实际上,这几乎总是更快,即使require可以并行加载脚本).
RequireJS和node-style之间的主要区别就像browserify(由tjameson建议的一个很酷的项目)使用的是模块的设计和要求:
require获取要加载的模块(javascript文件)列表和回调函数.当它加载了每个模块时,它会调用每个模块的回调作为回调的参数.因此,它是真正的异步,因此非常适合网络.require是一个阻塞调用,它加载模块并将其作为对象返回.这适用于Node,因为文件从文件系统读取,这足够快,但在Web上运行不佳,因为同步加载文件可能需要更长的时间.实际上,许多开发人员在看到AMD之前都使用过Node(因此也使用了CommonJS).此外,许多库/模块是为CommonJS编写的(通过向exports对象添加内容)而不是为AMD 编写(通过从define函数返回模块).因此,许多支持Node的Web开发人员希望在Web上使用CommonJS库.这是可能的,因为从<script>标签加载是阻塞的.像browserify这样的解决方案采用CommonJS(Node)模块并将它们包装起来,以便您可以将它们包含在脚本标记中.
因此,如果您正在为Web开发自己的多文件项目,我强烈推荐RequireJS,因为它确实是Web的模块系统(尽管在公平披露中,我发现AMD比CommonJS更自然).最近,区别变得不那么重要了,因为RequireJS现在允许您基本上使用CommonJS语法.另外,RequireJS可用于在Node中加载AMD模块(虽然我更喜欢node-amd-loader).
给出以下代码:
msg = "test"
try:
    "a"[1]
except IndexError as msg:
    print("Error happened")
print(msg)
有人可以解释为什么这会导致Python 3中的以下输出?
Error happened
Traceback (most recent call last):
  File "test.py", line 6, in <module>
    print(msg)
NameError: name 'msg' is not defined
我正在写使用一些有用的功能像其他一些包R里面的函数stringr和base64enc.是不是首先要调用library(...)或者require(...加载这些包,而是::用来直接引用我需要的函数,比如stringr::str_match(...)?
在一般情况下这是一个好习惯吗?或者它会引起什么问题?
或者更具体到我需要的东西:
如果我从另一个函数中调用一个函数,它是从调用函数中还是从上面的级别中提取变量?例如:
myVar=0;
function runMe(){
    myVar = 10;
    callMe();
}
function callMe(){
   addMe = myVar+10;
}
如果通过runMe()调用callMe(),myVar最终会是什么?
R命名空间充当其关联包中所有函数的直接环境.换句话说,当函数bar()从包富调用另一个函数时,R首次评估器搜索中的其他功能<environment: namespace:foo>,那么"imports.foo",<environment: namespace:base>,<environment: R_GlobalEnv>,等下键入返回的搜索列表search().
命名空间的一个很好的方面是它们可以使包像行为更好的公民:未经输出的函数<environment: namespace:foo>和函数imports:foo仅可用:(a)foo中的函数; (b)从foo进口的其他包裹; 或(c)通过完全合格的函数调用,如foo:::bar().
或者直到最近才想到......
这个最近的SO问题突出了一个案例,其中通过调用看似无关的函数找到了一个隐藏在其包的名称空间中的函数:
group <- c("C","F","D","B","A","E")
num <- c(12,11,7,7,2,1)
data <- data.frame(group,num)
## Evaluated **before** attaching 'gmodels' package
T1 <- transform(data, group = reorder(group,-num))
## Evaluated **after** attaching 'gmodels
library(gmodels)
T2 <- transform(data, group = reorder(group,-num))
identical(T1, T2) 
# [1] FALSE
@Andrie通过指出gmodels从包gdata导入来回答原始问题,包中包含一个 …
编辑:看起来这是一个非常古老的"错误"或实际上,功能.例如,参见这封邮件
我试图了解Python范围规则.更准确地说,我认为我理解它们,但后来我在这里找到了这个代码:
x = "xtop"
y = "ytop"
def func():
    x = "xlocal"
    y = "ylocal"
    class C:
        print(x)
        print(y)
        y = 1
func()
在Python 3.4中,输出是:
xlocal
ytop
如果我用函数替换内部类,那么它合理地给出了UnboundLocalError.你能解释一下为什么它在课堂上表现出这种奇怪的方式吗?选择范围规则的原因是什么?
scoping ×10
javascript ×4
r ×3
namespaces ×2
python ×2
scope ×2
hoisting ×1
load ×1
perl ×1
python-3.x ×1
r-faq ×1
require ×1