Questions tagged «closures»

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

7
Java 7中的闭包
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow 的主题。 2年前关闭。 改善这个问题 什么是封包?它应该被包含在Java 7中(闭包包含在Java 7中进行了讨论,但最终并没有包括在内。-ed)谁能请我提供我从哪里可以了解闭包的东西一些可靠的参考?
105 java  closures 

4
嵌套函数中的局部变量
好的,请耐心等待,我知道它看起来会令人费解,但是请帮助我了解发生了什么。 from functools import partial class Cage(object): def __init__(self, animal): self.animal = animal def gotimes(do_the_petting): do_the_petting() def get_petters(): for animal in ['cow', 'dog', 'cat']: cage = Cage(animal) def pet_function(): print "Mary pets the " + cage.animal + "." yield (animal, partial(gotimes, pet_function)) funs = list(get_petters()) for name, f in funs: …

7
Swift上的块(animateWithDuration:animations:completion :)
我在使块在Swift上无法工作时遇到了麻烦。这是一个有效的示例(没有完成框): UIView.animateWithDuration(0.07) { self.someButton.alpha = 1 } 或者没有尾随闭包: UIView.animateWithDuration(0.2, animations: { self.someButton.alpha = 1 }) 但是一旦我尝试添加完成块,它将无法正常工作: UIView.animateWithDuration(0.2, animations: { self.blurBg.alpha = 1 }, completion: { self.blurBg.hidden = true }) 自动完成功能给了我,completion: ((Bool) -> Void)?但不确定如何使它起作用。还尝试了结尾闭包,但出现了相同的错误: ! Could not find an overload for 'animateWithDuration that accepts the supplied arguments Swift 3/4的更新: // This …
102 ios  swift  closures 

1
访问修改后的闭包(2)
这是从Access到Modified Closure的扩展问题。我只想验证以下内容是否真的足够安全用于生产。 List<string> lists = new List<string>(); //Code to retrieve lists from DB foreach (string list in lists) { Button btn = new Button(); btn.Click += new EventHandler(delegate { MessageBox.Show(list); }); } 每次启动我只会执行一次以上操作。目前看来,它工作正常。正如乔恩(Jon)在某些情况下提到的违反直觉的结果。那么,我需要在这里注意什么?如果列表多次运行,可以吗?
101 c#  .net  resharper  closures 

2
为什么我们需要纤维
对于纤维,我们有一个经典的例子:生成斐波那契数 fib = Fiber.new do x, y = 0, 1 loop do Fiber.yield y x,y = y,x+y end end 为什么我们这里需要纤维?我可以使用相同的Proc重写它(实际上是关闭) def clsr x, y = 0, 1 Proc.new do x, y = y, x + y x end end 所以 10.times { puts fib.resume } 和 prc = clsr 10.times …
100 ruby  lambda  closures  fibers  proc 

6
此JavaScript模式称为什么,为什么使用它?
我正在研究THREE.js,并注意到一种定义函数的模式,如下所示: var foo = ( function () { var bar = new Bar(); return function ( ) { //actual logic using bar from above. //return result; }; }()); (实施例见光线投射方法这里)。 这种方法的正常变化如下所示: var foo = function () { var bar = new Bar(); //actual logic. //return result; }; 将第一个版本与正常版本进行比较,第一个版本的不同之处在于: 它分配一个自动执行功能的结果。 它在此函数内定义了一个局部变量。 它返回包含使用局部变量的逻辑的实际函数。 …

2
Swift @转义和完成处理程序
我试图更准确地理解Swift的“关闭”。 但是@escaping而且Completion Handler太难理解了 我搜索了许多Swift帖子和官方文档,但感觉还不够。 这是官方文件的代码示例 var completionHandlers: [()->Void] = [] func someFunctionWithEscapingClosure(completionHandler: @escaping ()->Void){ completionHandlers.append(completionHandler) } func someFunctionWithNoneescapingClosure(closure: ()->Void){ closure() } class SomeClass{ var x:Int = 10 func doSomething(){ someFunctionWithEscapingClosure { self.x = 100 //not excute yet } someFunctionWithNoneescapingClosure { x = 200 } } } let instance = SomeClass() …

2
使用匿名函数作为参数访问外部变量
基本上,我使用此方便的函数来处理数据库行(请注意PDO和/或其他内容) function fetch($query,$func) { $query = mysql_query($query); while($r = mysql_fetch_assoc($query)) { $func($r); } } 使用此功能,我可以简单地执行以下操作: fetch("SELECT title FROM tbl", function($r){ //> $r['title'] contains the title }); 假设现在我需要将所有内容都串联$r['title']在var中(这只是一个示例)。 我该怎么办?我当时在想这样的事情,但它不是很优雅: $result = ''; fetch("SELECT title FROM tbl", function($r){ global $result; $result .= $r['title']; }); echo $result;
93 php  closures  scope 

1
来自Pylint的Cell-var-from-loop警告
对于以下代码: for sort_key, order in query_data['sort']: results.sort(key=lambda k: get_from_dot_path(k, sort_key), reverse=(order == -1)) Pylint报告了一个错误: 循环中定义的单元变量sort_key(cell-var-from-loop) 有人可以暗示这里发生了什么吗?根据pylint源代码,描述为: 闭包中使用的变量在循环中定义。这将导致所有闭包对封闭变量使用相同的值。 但是我不知道这意味着什么。谁能举例说明这个问题?


12
函数指针,闭包和Lambda
我现在正在学习函数指针,当我阅读有关该主题的K&R章节时,打动我的第一件事是:“嘿,这有点像闭包。” 我知道这个假设在某种程度上根本上是错误的,并且在网上搜索之后,我没有发现对此比较的任何分析。 那么,为什么C风格的函数指针与闭包或lambda基本不同?据我所知,这与以下事实有关:函数指针仍指向已定义(命名)的函数,而不是匿名定义函数的做法。 为什么在第二种情况下将函数传递给未命名的函数比在第一种情况下传递的只是普通的日常函数更强大? 请告诉我如何以及为什么如此紧密地比较两者是错误的。 谢谢。

6
JavaScript函数别名似乎不起作用
我只是在阅读此问题,想尝试使用别名方法,而不是使用功能包装器方法,但是我似乎无法使其在Firefox 3或3.5beta4或Google Chrome中都可以在其调试窗口和在测试网页中。 萤火虫: >>> window.myAlias = document.getElementById function() >>> myAlias('item1') >>> window.myAlias('item1') >>> document.getElementById('item1') <div id="item1"> 如果将其放在网页中,则对myAlias的调用给我这个错误: uncaught exception: [Exception... "Illegal operation on WrappedNative prototype object" nsresult: "0x8057000c (NS_ERROR_XPC_BAD_OP_ON_WN_PROTO)" location: "JS frame :: file:///[...snip...]/test.html :: <TOP_LEVEL> :: line 7" data: no] Chrome(为清楚起见,插入了>>>): >>> window.myAlias = document.getElementById function getElementById() { …


8
JDK 8中的默认值是Java中的一种多继承形式吗?
JDK 8中的一项新功能允许您在保留二进制兼容性的同时添加到现有接口。 语法就像 public interface SomeInterface() { void existingInterface(); void newInterface() default SomeClass.defaultImplementation; } 对于所有现有的实施方式,SomeInterface当他们升级到这个新版本时,并不会突然出现编译错误newInterface()。 虽然这很简洁,但是当您实现两个都添加了您未实现的新默认方法的接口时会发生什么呢?让我举例说明。 public interface Attendance { boolean present() default DefaultAttendance.present; } public interface Timeline { boolean present() default DefaultTimeline.present; } public class TimeTravelingStudent implements Attendance, Timeline { } // which code gets called? new TimeTravelingStudent().present(); 是否已将其定义为JDK …


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.