标签: anonymous-function

在JavaScript中使用(function(){...})()有什么好处

我在JQuery中注意到使用了以下代码结构

(function(){var l=this,g,y=l.jQuery,p=l.$,...})()

这似乎创建了一个功能,并称之为.

采用这种方法与内联函数的内容相比有什么好处?

javascript closures anonymous-function

9
推荐指数
1
解决办法
1821
查看次数

PHP闭包和隐式全局变量范围

有没有办法可以隐含地将顶级变量声明为闭包中使用的全局变量?

例如,如果使用如下代码:

$a = 0; //A TOP-LEVEL VARIABLE

Alpha::create('myAlpha')
    ->bind(DataSingleton::getInstance()
        ->query('c')
    )
    ->addBeta('myBeta', function($obj){
        $obj->bind(DataSingleton::getInstance()
                ->query('d')
            )
            ->addGamma('myGamma', function($obj){
                $obj->bind(DataSingleton::getInstance()
                        ->query('a')
                    )
                    ->addDelta('myDelta', function($obj){
                        $obj->bind(DataSingleton::getInstance()
                            ->query('b')
                        );
                    });
            })
            ->addGamma('myGamma', function($obj){

                $a++; //OUT OF MY SCOPE

                $obj->bind(DataSingleton::getInstance()
                        ->query('c')
                    )
                    .
                    .
                    .
Run Code Online (Sandbox Code Playgroud)

从这样的方法调用闭包:

    public function __construct($name, $closure = null){
        $this->_name = $name;
        is_callable($closure) ? $closure($this) : null;
    }
Run Code Online (Sandbox Code Playgroud)

所以在summary/TL; DR中,有没有一种方法可以隐式地将变量声明为全局,以便在不使用global关键字或$GLOBALS超全局的闭包(或其他函数)中使用?

我在另一个频繁的论坛上开始讨论这个话题(http://www.vbforums.com/showthread.php?p=3905718#post3905718)

php closures scope global-variables anonymous-function

9
推荐指数
1
解决办法
6451
查看次数

为什么这个anon子例程声明在Perl中被解析为间接对象方法?

在下面的匿名子例程声明中,Perl似乎将其解析为间接方法调用,而不是作为子例程:

use 5.010;
use strict;
use warnings;

sub proxy {
    my $new = shift;
    say "creating proxy: $new";
    sub :lvalue {
        say "running proxy: $new";
        tie my $ret, 'Some::Package', shift, $new;
        $ret
    }
}

say "before";
my $p1 = proxy '_value';
say "p1 declared: $p1";
my $p2 = proxy 'value';
say "p2 declared: $p2";
Run Code Online (Sandbox Code Playgroud)

打印:

before
creating proxy: _value
running proxy: _value
Can't locate object method "TIESCALAR" via package "Some::Package" ...

如果a return或者my $sub =之前添加sub :lvalue …

syntax perl anonymous-function

9
推荐指数
1
解决办法
193
查看次数

如何将对象上下文传递给匿名函数?

有没有一种方法可以将对象上下文传递给匿名函数而不$this作为参数传递?

class Foo {
    function bar() {
        $this->baz = 2;
        # Fatal error: Using $this when not in object context
        $echo_baz = function() { echo $this->baz; };
        $echo_baz();
    }
}
$f = new Foo();
$f->bar();
Run Code Online (Sandbox Code Playgroud)

php scope anonymous-function

9
推荐指数
1
解决办法
4534
查看次数

SML中的递归匿名函数

是否可以在SML中编写递归匿名函数?我知道我可以使用fun语法,但我很好奇.

我写过,作为我想要的一个例子:

val fact =
    fn n => case n of
                 0 => 1
               | x => x * fact (n - 1)
Run Code Online (Sandbox Code Playgroud)

recursion functional-programming sml anonymous-function

9
推荐指数
2
解决办法
6160
查看次数

匿名函数/闭包并使用self ::或static ::

我正在使用匿名函数,我在对象之外创建匿名函数,然后将其添加到稍后将与__callStatic魔术函数一起使用的对象中.要添加的闭包包含父类的方法.我想知道我是否能够从闭包中调用这些方法?

现在我收到此错误:

EmptyObject::addMethod('open', function(){
    if (static::_hasAdapter(get_class(), __FUNCTION__))
            return self::_callAdapter(get_class(), __FUNCTION__, $details);

    echo '<p>You have mail!</p>';
});
Run Code Online (Sandbox Code Playgroud)

抛出此错误:

致命错误:当没有活动类范围时,无法访问static ::

//Add the functions
EmptyObject::addMethod('open', function(){
    if (EmptyObject::_hasAdapter('EmptyObject', __FUNCTION__))
            return EmptyObject::_callAdapter('EmptyObject', __FUNCTION__, $details);

    echo '<p>You have mail!</p>';
});
Run Code Online (Sandbox Code Playgroud)

抛出此错误,因为该方法受到保护

致命错误:在类EmptyObject中找不到带有消息'Method'ahasAdapter'的未捕获异常'BadMethodCallException'

php static closures anonymous-function

9
推荐指数
3
解决办法
7615
查看次数

$ .proxy,bind,call,apply之间的区别

旧方式:

var self = this;    
setTimeout(function(){
  console.log(self);
}, 5000);
Run Code Online (Sandbox Code Playgroud)

使用jQuery:

setTimeout($.proxy(function(){
  console.log(this);
}, this), 5000);
Run Code Online (Sandbox Code Playgroud)

使用绑定:

setTimeout((function(){
  console.log(this);
}).bind(this), 5000);
Run Code Online (Sandbox Code Playgroud)

随叫随到:

setTimeout((function(){
  console.log(this);
}).call(this), 5000);
Run Code Online (Sandbox Code Playgroud)

似乎申请也有效:

setTimeout((function(){
  console.log(this);
}).apply(this), 5000);
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/SYajz/1/

我想知道这些方法之间是否存在任何不那么明显的差异

javascript jquery object this anonymous-function

9
推荐指数
1
解决办法
850
查看次数

获取匿名函数的字符串表示形式

假设我有一个匿名的PHP函数,如下所示:

<?php
$l = function() { echo "hello world"; };
Run Code Online (Sandbox Code Playgroud)

是否有可能获得匿名函数的字符串表示$l,即包含函数体的字符串?

我试了几件事:

  • echo $l; PHP Catchable致命错误:类Closure的对象无法转换为字符串
  • var_dump($l); 类闭包#1(0){}
  • echo $l->__toString();:调用未定义的方法Closure :: __ toString()
  • get_class_methods($l)返回array('bind', 'bindTo'),所以似乎没有未记录的方法
  • $r = new ReflectionClass($l);:getProperties(),getConstants()和getStaticProperties()都是空的,也$r->__toString()没有返回任何有用的东西.

我在代码中并不需要这个,我只是认为如果出现问题可能对日志记录有用.在我无法自己提出解决方案后,我很好奇是否有可能.

php closures anonymous-function

9
推荐指数
1
解决办法
2301
查看次数

函数调用本身不起作用(无限循环,Javascript)

我正在尝试等待,然后在数组中的所有图像都已完成加载(使用.complete)时收到消息,根据此处的答案.因此我设置了如下的无限循环.但是,当我运行这个时,我得到一个错误,即没有定义checkForAllImagesLoaded().这段代码正在通过书签运行,因此它全部包含在一个匿名函数结构中(如下所示).如果我在该构造之外重新定义我的函数和变量,它就可以工作.但这似乎是编写bookmarklet的一种糟糕方式.我怎样才能解决这个问题,以便在setTimeout之后仍能识别该函数?

(function() {

    //var images = array of images that have started loading

    function checkForAllImagesLoaded(){
        for (var i = 0; i < images.length; i++) {
            if (!images[i].complete) {
               setTimeout('checkForAllImagesLoaded()', 20);
               return;
            }
        }
    }

    checkForAllImagesLoaded();

})();
Run Code Online (Sandbox Code Playgroud)

javascript function definition callback anonymous-function

8
推荐指数
1
解决办法
4067
查看次数

Delphi中有没有办法为按钮事件分配匿名方法?

我想知道Delphi中是否有一种方法可以为表单控件事件分配匿名方法.

例如:

Button1.OnClick := procedure (Sender: TObject) begin ShowMessage('') end;
Run Code Online (Sandbox Code Playgroud)

当然这给了我一个错误

[dcc32错误] Control.Controller.pas(51):E2009不兼容的类型:'方法指针和常规程序'

这是因为该方法必须属于一个对象,但它不再是匿名的.

也许有一些解决方法

delphi events anonymous-function

8
推荐指数
1
解决办法
3511
查看次数