小编qol*_*lin的帖子

JavaScript不支持使用局部变量进行闭包吗?

我对这段代码感到非常困惑:

var closures = [];
function create() {
  for (var i = 0; i < 5; i++) {
    closures[i] = function() {
      alert("i = " + i);
    };
  }
}

function run() {
  for (var i = 0; i < 5; i++) {
    closures[i]();
  }
}

create();
run();
Run Code Online (Sandbox Code Playgroud)

根据我的理解,它应该打印0,1,2,3,4(这不是闭包的概念吗?).

而是打印5,5,5,5,5.

我试过Rhino和Firefox.

有人可以向我解释这种行为吗?Thx提前.

javascript closures loops

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

如何根据索引过滤序列中的元素

我有一个序列s和这个序列的索引列表indexes.如何仅保留通过索引提供的项目?

简单的例子:

(filter-by-index '(a b c d e f g) '(0 2 3 4)) ; => (a c d e)
Run Code Online (Sandbox Code Playgroud)

我的用例:

(filter-by-index '(c c# d d# e f f# g g# a a# b) '(0 2 4 5 7 9 11)) ; => (c d e f g a b)
Run Code Online (Sandbox Code Playgroud)

clojure

14
推荐指数
4
解决办法
6455
查看次数

将方法添加到域类

我有一个包含几个字段的域类.我可以从我的.gsps访问它们.我想在域类中添加一个方法,我可以从.gsps中调用它(这个方法是一种虚拟字段;它的数据不是直接来自数据库).

如何添加方法以及如何从.gsps中调用它?

grails groovy

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

将同一对象两次添加到ManyToManyField

我有两个django模型类:

class A(models.Model):
     name = models.CharField(max_length = 128)    #irrelevant

class B(models.Model):
     a = models.ManyToManyField(A)
     name = models.CharField(max_length = 128)    #irrelevant
Run Code Online (Sandbox Code Playgroud)

我想做的是以下内容:

a1 = A()
a2 = A()
b = B()

b.a.add(a1)
b.a.add(a1)    #I want to have a1 twice
b.a.add(a2)

assert len(b.a.all()) == 3 #this fails; the length of all() is 2
Run Code Online (Sandbox Code Playgroud)

我猜add()使用set语义,但我怎么能绕过呢?我试着调查自定义管理器,但我不确定这是否正确(似乎很复杂)......

提前致谢!

python django django-models

7
推荐指数
1
解决办法
3198
查看次数

如何在django中处理未保存的多对多关系?

我在django中有几个连接多对多的模型.我想在内存中创建这些模型的实例,将它们呈现给用户(通过view-templates中的自定义方法调用),如果用户满意,则将它们保存到数据库中.

但是,如果我尝试对模型实例(例如,调用呈现方法)执行任何操作,则会收到一条错误消息,指出我必须先保存实例.文档说这是因为模型处于多对多的关系中.

如何向用户显示对象并允许他/她保存或丢弃它们而不会使我的数据库混乱?

(我想我可以关闭交易处理并在整个项目中自己完成,但这听起来像是一个容易出错的措施...)

谢谢!

python django many-to-many django-models

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

如何在宏中定义变量,以便它们可用于宏的调用者

我想要一个可以像这样使用的宏dbtest:

(dbtest
  (prn test-object1)
  (prn test-object2))
Run Code Online (Sandbox Code Playgroud)

test-object1和test-object2应该是dbtest定义的变量(因为我每次使用dbtest宏都需要它们)."prn"只是一个例子; 我想在宏中使用任意代码.

我试过这个:

(defmacro dbtest [& body]
  `(sql/with-connection db
     (delete-all-tables)
     (let [~'test-object1 (insert-object "foo")]
       ~@body)))
Run Code Online (Sandbox Code Playgroud)

其中insert-object是一个向DB中插入内容并返回相应数据结构的函数.

但它不起作用:我得到一个"没有这样的var"错误

macros clojure

4
推荐指数
1
解决办法
795
查看次数