javascript

java

python

c#

android

c++

node.js

php

reactjs

jquery

html

css

ios

.net

git

ruby-on-rails

sql

c

string

ruby

.net-闭包如何在后台工作? (C#)

我觉得我对闭包,如何使用它们以及什么时候有用非常了解。 但是我不了解的是它们在内存中的幕后工作原理。 一些示例代码:

public Action Counter()
{
    int count = 0;
    Action counter = () =>
    {
        count++;
    };

    return counter;
}

通常,如果{count}没有被闭包捕获,则其生命周期将限制在Counter()方法范围内,并且在完成后它将与Counter()的其余堆栈分配一起消失。 封闭时会发生什么? 此Counter()调用的整个堆栈分配是否仍然存在? 是否将{count}复制到堆? 它是否从未真正分配到堆栈上,而是被编译器识别为已关闭,因此始终存在于堆中?

对于这个特定的问题,我主要对C#如何工作感兴趣,但不会反对与支持闭包的其他语言进行比较。

trans by 2020-07-13T22:01:00Z

闭包-Java中的循环引用示例?

我想知道是否有人在javascript中有一个很好的,可行的循环引用示例? 我知道使用闭包非常容易,但是我很难解决这个问题。 我将在Firebug中剖析一个示例,这一点将不胜感激。

谢谢

trans by 2020-07-09T05:46:33Z

Java是否需要闭包?

最近,我一直在阅读有关下一版Java可能支持闭包的内容。 我感觉我对什么是闭包有一个非常牢固的掌握,但是我想不出一个可靠的例子说明它们如何使“面向对象”语言“更好”。 谁能给我一个特定的用例,在该用例中需要关闭(或首选关闭)?

trans by 2020-07-03T20:37:39Z

在C#5.0中捕获的闭包(循环变量)

在C#5.0中可以正常运行(意味着达到预期):

var actions = new List<Action>();
foreach (var i in Enumerable.Range(0, 10))
{
    actions.Add(() => Console.WriteLine(i));
}
foreach (var act in actions) act();

打印0到9。但是此显示10表示10次:

var actions = new List<Action>();
for (var i = 0; i < 10; i++)
{
    actions.Add(() => Console.WriteLine(i));
}
foreach (var act in actions) act();

问题:这是我们在5.0之前的C#版本中遇到的一个问题。 因此我们必须使用局部循环占位符进行关闭,并且现在已在C#5.0中的“ foreach”循环中对其进行了修复。 但不要在“ for”循环中!

这背后的原因是什么(也无法解决for循环的问题)?

trans by 2020-07-03T05:17:51Z

PHP-为什么使用匿名函数?

可能重复:
您如何在PHP中使用匿名函数?

为什么要使用匿名函数? 我的意思是,使用它的真正意义是什么?我只是真的不明白这一点。 我的意思是,您使用函数来使代码更清晰或更多次使用。 但是匿名函数只是不执行第一个也不执行第二个。我用谷歌搜索,但找不到有人问同样的问题。

trans by 2020-06-30T04:34:33Z

调用fun时为什么会有内存分配

我有以下程序,它从两个静态方法构造一个本地Func。 但是奇怪的是,当我分析该程序时,它分配了将近一百万个Func对象。 为什么调用Func对象还创建Func实例?

enter image description here

public static class Utils
{
    public static bool ComparerFunc(long thisTicks, long thatTicks)
    {
        return thisTicks < thatTicks;
    }
    public static int Foo(Guid[] guids, Func<long, long, bool> comparerFunc)
    {
        bool a = comparerFunc(1, 2);
        return 0;
    }
}
class Program
{
    static void Main(string[] args)
    {
        Func<Guid[], int> func = x => Utils.Foo(x, Utils.ComparerFunc);
        var guids = new Guid[10];
        for (int i = 0; i < 1000000; i++)
        {
            int a = func(guids);
        }
    }
}
trans by 2020-06-23T08:58:29Z

可以修补闭包嵌套函数吗,还是必须重复整个外部函数?

我们使用的第三方库包含一个相当长的函数,该函数在其中使用了嵌套函数。 我们对该库的使用触发了该函数中的错误,我们非常想解决该错误。

不幸的是,库维护者的修复速度有些慢,但是我们不想派遣库。 在他们解决此问题之前,我们也无法保留发布。

我们宁愿使用猴子补丁来解决此问题,因为这比补丁源更容易跟踪。 但是,如果要重复一个非常大的功能,只需替换内部功能就足够了,这会让人觉得过头了,而且其他人也很难看到我们到底做了什么更改。 我们是否在图书馆鸡蛋上贴了一块静态补丁?

内部函数依赖于对变量的关闭; 一个人为的例子是:

def outerfunction(*args):
    def innerfunction(val):
        return someformat.format(val)

    someformat = 'Foo: {}'
    for arg in args:
        yield innerfunction(arg)

在这里我们只想替换2932902774083945945472的实现。实际的外部函数要长得多,而且要长得多。 当然,我们将重用封闭变量并维护函数签名。

trans by 2020-06-21T15:12:31Z

与语言X闭包相比,Python中的闭包有哪些限制?

其中X是支持某种闭包形式的任何编程语言(C#,Javascript,Lisp,Perl,Ruby,Scheme等)。

在Python的闭包中(与Ruby的闭包相比)中提到了一些限制,但是该文章过时了,现代的Python中不再存在许多限制。

看到一个代码示例以了解具体的限制会很棒。

相关问题:

  • 您能解释闭包(因为它们与Python有关)吗?
  • 什么是“关闭”?
  • javascript闭包如何工作?
trans by 2020-06-20T14:52:52Z

我们在C ++中有闭包吗?

我在阅读有关网络关闭的信息。 我想知道C ++是否具有用于闭包的内置工具,或者是否有任何方法可以在C ++中实现闭包?

trans by 2020-02-22T22:23:17Z

闭包-jQuery美元符号($)作为函数参数?

我了解JavaScript闭包,并且已经在原生JS中看到了这一点:

(function () {
  // all JS code here
})();

但是,添加jQuery香料有什么作用?

(function ($) {
  // all JS code here
})(jQuery);
trans by 2020-02-22T02:57:36Z

php-例外:不允许序列化“关闭”

因此,我不确定向大家展示什么,如果您需要更多代码,请随时询问:

因此,此方法将在我们的应用程序中为Zend设置initMailer:

protected function _initMailer()
{
    if ('testing' !==  APPLICATION_ENV) {
        $this->bootstrap('Config');
        $options = $this->getOptions();
        $mail = new Zend_Application_Resource_Mail($options['mail']);
    }elseif ('testing'  ===  APPLICATION_ENV) {
        //change the mail transport only if dev or test
        if (APPLICATION_ENV <> 'production') {

            $callback = function()
            {
                return 'ZendMail_' . microtime(true) .'.tmp';
            };

            $mail = new Zend_Mail_Transport_File(
                array('path' => '/tmp/mail/',
                        'callback'=>$callback
                )
            );

            Zend_Mail::setDefaultTransport($mail);
        }
    }


    return $mail;
}

您可以看到其中的闭包。当我运行使用此代码的任何测试时,都会得到:

Exception: Serialization of 'Closure' is not allowed 

因此,与此“关闭”相关的所有测试均失败。 所以我在这里问你们我应该怎么做。

为了澄清上述内容,所有操作都是在说,我们发送的任何电子邮件都希望将有关该电子邮件的信息存储在文件/ tmp / mail /中的文件夹中。

trans by 2020-02-14T19:20:55Z

我的JavaScript范围有什么问题?

这个问题已经在这里有了答案:

  • JavaScript闭包如何工作?                                     86个回答
  • 循环内的JavaScript闭合–简单的实际示例                                     44个答案

每次以下警报0

function timer() {
    for (var i = 0; i < 3; ++i) {
        var j = i;
        setTimeout(function () {
            alert(j);
        }, 1000);
    }
}

timer();

0是否不应该将1设置为setTimeout的各个范围?

而如果我这样做:

function timer() {
    for (var i = 0; i < 3; ++i) {
        (function (j) {
            setTimeout(function () {
                alert(j);
            }, 1000);
        })(i);
    }
}

timer();

它会像它应该警告012一样。

我有什么想念的吗?

trans by 2020-02-13T22:53:27Z

闭包-在Javascript onClick事件中传递参数

我正在尝试在onclick事件中传递参数。 下面是一个示例代码:

<div id="div"></div>

<script language="javascript" type="text/javascript">
   var div = document.getElementById('div');

   for (var i = 0; i < 10; i++) {
       var link = document.createElement('a');
       link.setAttribute('href', '#');
       link.innerHTML = i + '';
       link.onclick=  function() { onClickLink(i+'');};
       div.appendChild(link);
       div.appendChild(document.createElement('BR'));
       }

   function onClickLink(text) {
       alert('Link ' + text + ' clicked');
       return false;
       }
    </script>

但是,每当我单击任何链接时,警报始终显示“链接10已单击”!

谁能告诉我我在做什么错?

谢谢

trans by 2020-02-13T19:25:47Z

python-如何使用装饰器将变量注入作用域?

[免责声明:做我想做的事可能有更多的pythonic方式,但是我想知道python的作用域在这里是如何工作的]

我试图找到一种方法来制作装饰器,该装饰器的作用类似于将名称注入另一个函数的作用域(以使名称不会泄漏到装饰器作用域之外)。 例如,如果我有一个函数说要打印一个尚未定义的名为var的变量,我想在调用它的装饰器中定义它。 这是一个中断的示例:

c = 'Message'

def decorator_factory(value):
    def msg_decorator(f):
        def inner_dec(*args, **kwargs):
            var = value
            res = f(*args, **kwargs)
            return res
        return inner_dec
    return msg_decorator

@decorator_factory(c)
def msg_printer():
    print var

msg_printer()

我希望它打印“ var”,但它给出:

NameError: global name 'var' is not defined

追溯甚至指向var,其定义为:

<ipython-input-25-34b84bee70dc> in inner_dec(*args, **kwargs)
      8         def inner_dec(*args, **kwargs):
      9             var = value
---> 10             res = f(*args, **kwargs)
     11             return res
     12         return inner_dec

所以我不明白为什么找不到var

有什么办法可以做这样的事情吗?

trans by 2020-02-08T08:21:14Z

node.js-JavaScript中的内存泄漏和关闭-何时以及为什么?

您经常在网络上读到使用闭包是JavaScript中大量内存泄漏的原因。 在大多数情况下,这些文章都涉及混合脚本代码和DOM事件,其中脚本指向DOM,反之亦然。

我了解关闭可能是一个问题。

但是Node.js呢? 在这里,我们自然没有DOM-因此,没有机会像浏览器一样出现内存泄漏的副作用。

关闭可能还会有什么其他问题? 有人可以详细说明或指向我关于此的很好的教程吗?

请注意,此问题明确针对Node.js,而不针对浏览器。

trans by 2020-02-03T00:42:26Z

什么是好的JavaScript OOP资源?

JavaScript是一种轻量级且功能强大的语言,但它常常被误解且难以学习(尤其是有关其面向对象的编程的知识)。

学习JavaScript OOP有哪些好的材料(博客,截屏视频和书籍)? 主题可以是任何东西,但现在不包括浏览器,AJAX和库。

您还如何学习JavaScript中的函数式编程,闭包,对象,继承和设计模式? 我个人希望看到更多的代码示例,因为我上面提到的某些书使该示例最少。

(编辑:由于此帖子现在是社区的工作,请帮助维护和开发以下资源列表!)

图书

  • JavaScript:Douglas Crockfond撰写的《 Good Parts》,这是大多数Javascripter在Stack Overflow上推荐的书。 我观察到,这本书使人们提高了Java脚本的技能。 访问他的网站:crockford.com了解更多信息。
  • 面向对象的JavaScript:Stoyan Stefanov创建可伸缩,可重用的高质量JavaScript应用程序和库,涉及许多OOP主题,例如对象,原型,继承和某些模式。
  • Ross Harmess和Dustin Diaz的Pro JavaScript Design Patterns讨论了著名的设计模式在JavaScript中的应用。

影片

  • 道格拉斯·克罗克福德(Douglas Crockford)的“高级JavaScript”视频。 Yahoo!上还有许多其他有趣的视频。 开发人员网络。
  • James Shore的《面向对象JavaScript权威指南》(2013年7月)。

堆栈溢出

  • 关于JavaScript关闭的堆栈溢出讨论
  • 关于JavaScript中“闭包”到底指的是什么的堆栈溢出讨论?
  • 关于JavaScript原型与功能OOP的堆栈溢出讨论

其他

  • 面向对象的JavaScript简介-Mozilla Dev
  • 假人的JavaScript闭包
  • JavaScript闭包
  • JavaScript闭包101
  • Douglas Crockfond的JavaScript私人成员
  • Douglas Crockfond撰写的JavaScript中的经典继承
  • Douglas Crockfond的JavaScript原型继承
  • JavaScript,该关闭了
  • Mozilla开发人员网络
trans by 2020-01-30T22:38:40Z

Javascript闭包与PHP闭包有什么区别?

JS中的闭包和PHP中的闭包有什么区别? 它们是否几乎以相同的方式工作? 用PHP编写闭包时需要注意一些警告吗?

trans by 2020-01-27T12:42:58Z

Java 8 lambda和匿名内部类之间的性能差异

在Java 8之前,可以通过使用匿名内部类来实现lambda功能。 例如:

interface Lambda {
    void doStuff();
}

// ...

public void doWithCallback(Lambda callback) {
    // ...
    callback.doStuff();
}

// ...

doWithCallback(new Lambda { 
    public void doStuff() { 
        // ... 
    } 
});

在性能方面,仍然使用这种方法和使用新的Java 8 lambda之间有区别吗?

trans by 2020-01-08T13:06:26Z

在JavaScript中的for循环中调用异步函数

我有以下代码:

for(var i = 0; i < list.length; i++){
    mc_cli.get(list[i], function(err, response) {
        do_something(i);
    });
}

mc_cli是与内存缓存数据库的连接。 可以想象,回调函数是异步的,因此可以在for循环已结束时执行。 同样,以这种方式调用do_something(i)时,它始终使用for循环的最后一个值。

我用这种方式尝试关闭

do_something((function(x){return x})(i)) 

但是显然,这再次使用了for循环索引的最后一个值。

我也尝试在for循环之前声明一个函数,如下所示:

var create_closure = function(i) {
    return function() {
        return i;
    }
}

然后打电话

do_something(create_closure(i)())

但同样没有成功,返回值始终是for循环的最后一个值。

谁能告诉我关闭有错吗? 我以为我了解他们,但我不知道为什么这不起作用。

trans by 2020-01-02T23:33:10Z

ios-Swift闭包中的$ 0和$ 1是什么意思?

let sortedNumbers = numbers.sort { $0 > $1 }
print(sortedNumbers)

有人能解释一下,$0$1意味着什么?

更多样品

array.forEach {
    actions.append($0)
}
trans by 2019-12-29T23:09:15Z

1 2 3 4 5 下一页 共5页