标签: scoping

Javascript中的范围问题

我需要在Javascript中获得有关范围问题的一些信息.我知道它支持词法(静态)范围,但是,它是否也支持动态范围?如果您对Javascript中的范围有任何了解,请与我分享?

谢谢

javascript scoping

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

Rails:查询缓存缓存默认范围?

我有一个像这样的默认范围是动态的:

default_scope :conditions => ["departure_date >= ?", DateTime.current.beginning_of_day]
Run Code Online (Sandbox Code Playgroud)

当我使用这段代码时,第一天就可以了.让我们说第一天是28-03-2011

但第二天似乎还在使用 "departure_date >= 28-03-2011"

我的默认范围是否被缓存?

caching default ruby-on-rails scoping

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

在for循环中初始化的变量的作用域规则

可能重复:
循环内部的Javascript闭包 - 简单实用的例子

我在我的一个项目中玩setTimeout以限制向DOM添加元素(因此UI在页面加载期间不会冻结).但是,我遇到了一些让我感到困惑的事情.鉴于此代码:

for(var i = 0; i < 5; i++) {
    var j = i + 10;
    console.log("i is: " + i + " j is: " + j);
    setTimeout(function() {
        console.log("in timeout i is: " + i + " j is: " + j);
    }, i * 1000);
}
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

i is: 0 j is: 10
i is: 1 j is: 11
i is: 2 j is: 12
i is: 3 j is: 13
i is: …
Run Code Online (Sandbox Code Playgroud)

javascript scoping settimeout

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

Common Lisp 作用域的微妙之处(动态 vs 词法)

在阅读了有关声明SPECIAL 的文档、特殊运算符LET、宏DEFVAR以及 StackOverflow 上关于 Common Lisp 中动态与词法范围的几个问题之后,例如,this 之后,我仍然无法理解以下行为在 SBCL 中评估这些形式。

;; x is a free variable
CL-USER> (defun fn ()
           (print x))
; in: DEFUN FN
;     (PRINT X)
; 
; caught WARNING:
;   undefined variable: X
; 
; compilation unit finished
;   Undefined variable:
;     X
;   caught 1 WARNING condition
FN

CL-USER> (describe 'x)
COMMON-LISP-USER::X
  [symbol]
; No value

CL-USER> (let ((x 'dinamic_1st_binding))
           (declare (special x))
           (print x)
           (fn)
           (let …
Run Code Online (Sandbox Code Playgroud)

lisp common-lisp scoping dynamic-scope lexical-scope

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

GCC中结构变量的范围规则

考虑以下C程序

#include <stdio.h>

typedef struct s {
  int x;
} s_t;

int main() {
  int x;
  s_t a;

  scanf("%d", &x);

  if (x > 0) {
    s_t a;
    a.x = x;
  }

  printf("%d\n", a.x);
}
Run Code Online (Sandbox Code Playgroud)

a在If分支结构变量明确阴影的a主结构体变量.可以预期printf中的输出将是未定义的,但是对于GCC,范围变量似乎等于主变量.

例如

gcc test.c -o test
echo 10 | ./test
Run Code Online (Sandbox Code Playgroud)

将输出10.

另一方面,通过clang执行此操作,正如预期的那样

clang test.c -o test
echo 10 | ./test
Run Code Online (Sandbox Code Playgroud)

输出-2145248048.

这是一个GCC错误还是存在某种未触发的行为?

gcc 4.8.2 clang 3.4

c gcc struct clang scoping

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

如何从具有相同名称的嵌套类型的类中引用全局类型?

我有一个在全局范围内声明的类,另一个具有相同名称的类嵌套在某个类中.

class Address {
    var someProperty: String?
}

class ThirdPartyAPI {
    class Address {
        var someOtherProperty: String?
        init(fromAddress address: Address) {
            self.someOtherProperty = address.someProperty
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是:如何从初始化中引用全局类而不是内部类?在给出的示例中,我遇到了错误Value of type 'ThirdPartyAPI.Address' has no member 'someProperty',这意味着编译器引用内部Address而不是全局内部.

scope nested-class scoping swift swift2

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

Python 中的词法范围

我正在学习 Python,更具体地说,我正在探索范围规则。

我尝试了以下“实验”:

def increment(n): 
   n += 1 
   print(n)
   return n

n = 1 
increment(n) 
print(n) 
Run Code Online (Sandbox Code Playgroud)

这段代码输出: 2 , 1 ,既然变量 n 返回到全局环境,难道不应该输出 2, 2 吗?

您的建议将不胜感激。

python scoping

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

Julia 范围:为什么这个函数会修改一个全局变量?

我是 Julia 的新手,到目前为止我是它的粉丝。但是从多年的 R 编程经验来看,一些范围规则让我感到困惑。

让我们来看看这个函数。这完全符合我的预期。

function foo1(x)
    y = x
    t = 1
    while t < 1000
      t += 1
      y += 1
    end
    return 42
end

var = 0;
foo1(var)
# 42
var
# 0
Run Code Online (Sandbox Code Playgroud)

但是当对数组做类似的事情时,它充当一个变异函数(在全局范围内修改它的参数!)

function foo2(x)
    y = x
    t = 1    
    while t < 1000
      t += 1
      y[1] += 1
    end
    return 42
end

var = zeros(1);
foo2(var)
# 42
var
# 999.0
Run Code Online (Sandbox Code Playgroud)

我意识到我可以通过将第一行更改为 来解决这个问题y = copy(x),但是首先出现这种(危险的?)行为的原因是什么?

arguments function scoping julia

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

Common Lisp:如何在父级的词法作用域中设置变量?

我想定义一个函数(而不是宏),它可以在其调用的范围内设置变量。

我努力了:

(defun var-set (var-str val)
  (let ((var-interned
          (intern (string-upcase var-str))))
    (set var-interned val)
    ))

(let ((year "1400"))
  (var-set "year" 1388)
  (labeled identity year))
Run Code Online (Sandbox Code Playgroud)

由于范围规则,这不起作用。有什么“技巧”可以实现这一点吗?

在Python中,我可以使用

previous_frame = sys._getframe(1)
previous_frame_locals = previous_frame.f_locals
previous_frame_locals['my-var'] = some_value
Run Code Online (Sandbox Code Playgroud)

lisp 有等效的 API 吗?

lisp variables scope common-lisp scoping

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

你能否启用R函数来评估自己的形式值?

在R语言中,假设我有一个函数ff(jj,kk,mm).我希望调用函数(或调用人在交互式会话中)能够在调用时使jj和kk以任意方式取决于mm.

具体而言,假设:

ff <- function(jj, kk, mm){
  xx <- jj + kk  
  out<- xx/mm   
  out
}
Run Code Online (Sandbox Code Playgroud)

然后在运行时,我想设置mm <- jj*kk.即:

ff(2, 3, (jj*kk))
Run Code Online (Sandbox Code Playgroud)

这会产生:

Error in ff(2, 3, (jj * kk)) : object 'jj' not found
Run Code Online (Sandbox Code Playgroud)

mm在评估之前,即在成功评估之后jj,不会抛出此错误kk.因此,他们将使用不同的范围规则进行第二次评估.我知道这是R标准范围.我问,我可以用这样的方式编写函数,它允许我递给一个简单的数字,或者其他形式参数的函数,只要这些参数在mm需要之前已经或者可以被评估了 吗?

请注意,我不是在问我是否应该这样做.对于后一个问题提出意见的人,我会坚决地假装礼貌.

我也不会问我是否可以预先计算jj并预先计算出预先消化的数字.我知道这是一个看似合理的答案,但由于我已经简化了问题,它不起作用.

arguments r dynamic scoping lexical-scope

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