标签: scoping

Python类范围规则

编辑:看起来这是一个非常古老的"错误"或实际上,功能.例如,参见这封邮件

我试图了解Python范围规则.更准确地说,我认为我理解它们,但后来我在这里找到了这个代码:

x = "xtop"
y = "ytop"
def func():
    x = "xlocal"
    y = "ylocal"
    class C:
        print(x)
        print(y)
        y = 1
func()
Run Code Online (Sandbox Code Playgroud)

在Python 3.4中,输出是:

xlocal
ytop
Run Code Online (Sandbox Code Playgroud)

如果我用函数替换内部类,那么它合理地给出了UnboundLocalError.你能解释一下为什么它在课堂上表现出这种奇怪的方式吗?选择范围规则的原因是什么?

python scoping

28
推荐指数
2
解决办法
1216
查看次数

在函数内部附加()

我想给一个函数提供一个params参数然后附加它,这样我每次引用list元素时都可以使用a而不是params $ a.

run.simulation<-function(model,params){
attach(params)
#
# Use elements of params as parameters in a simulation
detach(params)
}
Run Code Online (Sandbox Code Playgroud)

这有问题吗?如果我已经定义了一个名为c的全局变量,并且还定义了一个名为c的列表"params"的元素,其值将在attach命令之后使用?

r scoping

21
推荐指数
3
解决办法
3391
查看次数

在foreach循环中找不到函数

我正在尝试使用foreach在R中进行多核计算.

A <-function(....) {
    foreach(i=1:10) %dopar% {
    B()
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我A在控制台中调用函数.问题是我调用一个函数PosdefB只在其它脚本文件我源中定义.我不得不把Posdef输出参数列表放在foreach:.export=c("Posdef").但是我收到以下错误:

Error in { : task 3 failed - "could not find function "Posdef""
Run Code Online (Sandbox Code Playgroud)

为什么不能找到这个定义的函数?

parallel-processing foreach multicore r scoping

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

R中的双冒号(::)是什么?

我正在关注Rbloggers中的一个教程并发现使用双冒号,我在线查看,但我找不到他们使用的解释.这是他们使用的一个例子.

df <- dplyr::data_frame(
  year = c(2015, NA, NA, NA), 
  trt = c("A", NA, "B", NA)
)
Run Code Online (Sandbox Code Playgroud)

我知道它会创建一个数据框,但我不明白它们的用途.

scope namespaces r operators scoping

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

为什么在Lua中使用do-end块?

我一直在努力为此寻找答案但却没有这样做.我想知道,实际使用的do-end块是什么?它只是说在我的书中需要时使用值,所以我怎么能用它呢?

我是否通过在do-end循环中放置一个函数并将局部变量放在函数外但在此do-end块内部并且函数可以看到变量来使用它来减少局部变量的范围?但那么功能仍然可以调用吗?

很抱歉非常模糊.我希望这是有道理的.也许一个插图的例子可能有用^^

lua block scoping

17
推荐指数
3
解决办法
1万
查看次数

使用dplyr将变量作为函数的默认参数

目标

我的目标是定义一些在dplyr动词中使用的函数,它们使用预定义的变量.这是因为我有一些这些函数带有一堆参数,其中许多参数都是相同的变量名.

我的理解:这很难(也许是不可能的)因为dplyr稍后会懒惰地评估用户指定的变量,但是任何默认参数都不在函数调用中,因此不可见dplyr.

玩具示例

考虑以下示例,我用它dplyr来计算变量是否已更改(在这种情况下相当无意义):

library(dplyr)
mtcars  %>%
  mutate(cyl_change = cyl != lag(cyl))
Run Code Online (Sandbox Code Playgroud)

现在,lag还支持备用排序,如下所示:

mtcars  %>%
  mutate(cyl_change = cyl != lag(cyl, order_by = gear))
Run Code Online (Sandbox Code Playgroud)

但是,如果我想创建自己的版本lag,总是按顺序排序gear呢?

尝试失败

天真的方法是这样的:

lag2 <- function(x, n = 1L, order_by = gear) lag(x, n = n, order_by = order_by)

mtcars %>%
  mutate(cyl_change = cyl != lag2(cyl))
Run Code Online (Sandbox Code Playgroud)

但这显然会引发错误:

没有找到名为'gear'的对象

更现实的选择是这些,但它们也不起作用:

lag2 <- function(x, n = 1L) lag(x, n = n, order_by = ~gear) …
Run Code Online (Sandbox Code Playgroud)

r scoping dplyr lazyeval

17
推荐指数
2
解决办法
1249
查看次数

静态变量初始化测验

#include <stdio.h>

class C
{
   public:
          static int i;
          static int j;
};

int i = 10;
int C::i = 20;
int C::j = i + 1;

int main ()
{
    printf("%d", C::j);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

价值是什么:C :: j

我正在阅读一个c ++测验,并遇到了以下问题.我认为答案是11.

int C::j = i + 1;

既然它正在访问非静态i的10?所以,我认为11应该是答案?

我通过visual studio编译并运行了这段代码并打印出来21.这对我来说很困惑.有人可以解释为什么会这样吗?我错过了什么?

c++ static-members scoping

16
推荐指数
1
解决办法
870
查看次数

我可以在Javascript中"扩展"一个闭包定义的"类"吗?

我有一个Javascript"类"定义如下:

var Welcomer = function(name) {
  var pName = name;
  var pMessage = function() {
    return "Hi, " + pName + "!";
  };

  return {
    sayHi: function() {
      alert(pMessage());
    }
  };
};

new Welcomer('Sue').sayHi();
Run Code Online (Sandbox Code Playgroud)

有没有办法以Welcomer这样的方式"子类化" 我可以重新定义公共方法并可以访问私有方法和变量?以下内容将允许我访问公共方法,但不允许访问私有方法:

var UnhappyWelcomer = function(name) {
  var pSadMessage = function() {
    // won't work, b/c I don't have access to pMessage
    return pMessage() + " Miserable day, innit?";
  };

  return {
    sayHi: function() {
      alert(pSadMessage());
    }
  };
};
UnhappyWelcomer.prototype = Welcomer(); // failed …
Run Code Online (Sandbox Code Playgroud)

javascript inheritance closures scoping

15
推荐指数
2
解决办法
4638
查看次数

R 2.11.1中的范围和功能:出了什么问题?

这个问题来自一系列其他问题,这些问题都涉及到同样的问题.出于某些奇怪的原因,在第二个函数中找不到第一个函数的局部环境中定义的变量的意义上,在另一个函数中使用函数有时会失败.

伪代码中的经典模式:

ff <- function(x){
    y <- some_value
    some_function(y)
}
ff(x)
Run Code Online (Sandbox Code Playgroud)

eval(expr,envir,enclos)中的错误:找不到对象'y'

首先我认为它与S4方法和那里的范围有关,但它也与其他函数一起发生.我和R开发团队进行了一些互动,但是他们所做的只是让我直接进入错误报告站点(我不得不说,这不是最吸引人的站点).我从来没有得到任何反馈.

随着问题不断出现,我想知道是否有一个逻辑解释.在所有这些情况下是否是一个常见的错误,如果是这样,哪一个?或者它真的是一个错误?

其中一些问题:

PS:我知道R-devel列表,万一你想知道......

environment r function scoping

14
推荐指数
2
解决办法
3209
查看次数

从函数内部将函数环境设置为调用环境(parent.frame)的函数环境

我仍然在努力寻找R范围和环境.我希望能够构造简单的辅助函数,这些函数可以从我的'main'函数中调用,这些函数可以直接引用这些主函数中的所有变量 - 但是我不想在每个main函数中定义辅助函数功能.

helpFunction<-function(){
#can I add a line here to alter the environment of this helper function to that of the calling function?
return(importantVar1+1)
}

mainFunction<-function(importantVar1){
return(helpFunction())
}

mainFunction(importantVar1=3) #so this should output 4
Run Code Online (Sandbox Code Playgroud)

r function environment-variables scoping

13
推荐指数
2
解决办法
6713
查看次数