Questions tagged «closures»

闭包是一类函数,它引用(封闭)其定义范围内的变量。如果闭包在其定义范围结束后仍然存在,则关闭的变量也将继续存在。

7
foreach标识符和闭包
在接下来的两个摘要中,第一个是安全的还是第二个必须做? 安全地说,每个线程是否保证从创建线程的同一循环迭代中调用Foo上的方法? 还是必须将引用复制到新变量“ local”到循环的每次迭代中? var threads = new List<Thread>(); foreach (Foo f in ListOfFoo) { Thread thread = new Thread(() => f.DoSomething()); threads.Add(thread); thread.Start(); } -- var threads = new List<Thread>(); foreach (Foo f in ListOfFoo) { Foo f2 = f; Thread thread = new Thread(() => f2.DoSomething()); threads.Add(thread); thread.Start(); …

6
在Python 2中,如何在父范围中写入变量?
我在函数内有以下代码: stored_blocks = {} def replace_blocks(m): block = m.group(0) block_hash = sha1(block) stored_blocks[block_hash] = block return '{{{%s}}}' % block_hash num_converted = 0 def convert_variables(m): name = m.group(1) num_converted += 1 return '<%%= %s %%>' % name fixed = MATCH_DECLARE_NEW.sub('', template) fixed = MATCH_PYTHON_BLOCK.sub(replace_blocks, fixed) fixed = MATCH_FORMAT.sub(convert_variables, fixed) 添加元素可以stored_blocks正常工作,但是我不能num_converted在第二个子功能中增加: UnboundLocalError:分配前已引用局部变量“ …

2
如何调用作为类变量的闭包?
class MyClass { var $lambda; function __construct() { $this->lambda = function() {echo 'hello world';}; // no errors here, so I assume that this is legal } } $myInstance = new MyClass(); $myInstance->lambda(); //Fatal error: Call to undefined method MyClass::lambda() 那么达到类变量的正确语法是什么?


2
Python Lambda绑定到本地值
下面的代码吐出了1两次,但是我希望看到0,然后1。 def pv(v) : print v x = [] for v in range(2): x.append(lambda : pv(v)) for xx in x: xx() 我期望python lambdas可以在后台绑定到本地变量指向的引用。但是,事实并非如此。我在大型系统中遇到了这个问题,其中lambda正在做现代C ++的bind等效操作(例如'boost :: bind'),在这种情况下,您将绑定到智能ptr或copy构造lambda的副本。 那么,如何将局部变量绑定到lambda函数并在使用时保留正确的引用?我对这种行为很不满意,因为我不希望带有垃圾收集器的语言有这种行为。

3
Swift 1.2中的@noescape属性
Swift 1.2中有一个新属性,函数中带有闭包参数,如文档所述: 这表明该参数只能被调用(或在调用中作为@ noescape参数传递),这意味着它不能超过调用的生命周期。 以我的理解,在此之前,我们可以[weak self]不让闭包强烈引用其类,而self可以为nil或执行闭包时的实例,但是现在,这@noescape意味着闭包将永远不会执行如果该课程取消了初始化。我理解正确吗? 如果我是@noescape对的,当它们的行为非常相似时,为什么要使用由常规函数插入的闭包呢?

2
将闭包更新为Swift 3-@escaping
我已经将代码更新为Xcode 8.0 beta 6,但是我对新的不可转义的闭包默认值感到困惑。在下面的代码的Xcode提示添加@escaping在前面的completion:在下面的第一行代码,但仍然无法编译,去的圈子。* (编辑:实际上,正如Xcode所建议的那样,@escaping应该添加在after之后 completion:。警报可能仍会显示,但清理和编译会将其删除。)*应该如何重新编写/修复此代码才能在更新的Swift 3中工作?我看过新手册,但找不到合适的代码示例。 func doSomething(withParameter parameter: Int, completion: () -> ()) { // Does something callSomeOtherFunc(withCompletion: completion) } // Calling the method and execute closure doSomething(withParameter: 2) { // do things in closure } 任何帮助,不胜感激!

5
可从闭包访问可变变量。我怎样才能解决这个问题?
我正在使用Twitter的Typeahead。我正在从Intellij遇到此警告。这导致每个链接的“ window.location.href”成为我的项目列表中的最后一个项目。 如何修复我的代码? 下面是我的代码: AutoSuggest.prototype.config = function () { var me = this; var comp, options; var gotoUrl = "/{0}/{1}"; var imgurl = '<img src="/icon/{0}.gif"/>'; var target; for (var i = 0; i < me.targets.length; i++) { target = me.targets[i]; if ($("#" + target.inputId).length != 0) { options = { …

6
在for循环中分配点击处理程序
我有几个div的#mydiv1,#mydiv2,#mydiv3,...和要指派点击处理对他们说: $(document).ready(function(){ for(var i = 0; i < 20; i++) { $('#question' + i).click( function(){ alert('you clicked ' + i); }); } }); 但是,我没有得到单击'you clicked 3'时的显示#mydiv3(就像其他所有单击一样)'you clicked 20'。我究竟做错了什么?

8
JavaScript中“闭包”到底指的是什么?
我了解闭包是什么,但在准确地理解术语closure所指的含义时遇到了一些麻烦。我已经在许多网站中看到过该术语,但很少有人同意该术语的实际定义。 是保留在堆栈框架中的变量吗? 是要返回的函数吗? 它是外部功能的范围吗? 它是内部(返回的)函数的范围吗? 返回函数后,可能是将变量保留在堆栈框架中的概念吗? 有人可以准确地告诉我closure指的是什么吗?

4
PHP 5.4-'关闭$ this支持'
我看到PHP 5.4的新计划功能是:特征,数组解引用,JsonSerializable接口和称为“ closure $this support”的东西。 http://en.wikipedia.org/wiki/Php#Release_history 尽管其他人要么立即清楚(JsonSerialiable,数组取消引用),要么我查看了具体细节(特征),但我不确定“关闭$ this支持”是什么。我一直在搜寻它或在php.net上找到关于它的任何内容均未成功 有人知道这应该是什么吗? 如果我不得不猜测,那就意味着这样: $a = 10; $b = 'strrrring'; //'old' way, PHP 5.3.x $myClosure = function($x) use($a,$b) { if (strlen($x) <= $a) return $x; else return $b; }; //'new' way with closure $this for PHP 5.4 $myNewClosure = function($x) use($a as $lengthCap,$b as …
68 php  closures 


3
Lambda闭包左值可以作为右值参考参数传递
我发现lvaluelambda闭包始终可以作为rvalue函数参数传递。 请参见以下简单演示。 #include <iostream> #include <functional> using namespace std; void foo(std::function<void()>&& t) { } int main() { // Case 1: passing a `lvalue` closure auto fn1 = []{}; foo(fn1); // works // Case 2: passing a `lvalue` function object std::function<void()> fn2 = []{}; foo(fn2); // compile error return 0; } …

2
为什么`std :: mem :: drop`与排名较高的特征范围中的闭包| _ |()不完全相同?
的实现std::mem::drop记录如下: pub fn drop<T>(_x: T) { } 因此,我希望该封盖|_| ()(俗称马桶盖)drop在两个方向上都可以按1:1的比例替换。但是,下面的代码显示drop与该函数的参数上绑定的较高特级特征不兼容,而马桶盖则兼容。 fn foo<F, T>(f: F, x: T) where for<'a> F: FnOnce(&'a T), { dbg!(f(&x)); } fn main() { foo(|_| (), "toilet closure"); // this compiles foo(drop, "drop"); // this does not! } 编译器的错误信息: error[E0631]: type mismatch in function arguments --> src/main.rs:10:5 | …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.