标签: anonymous-function

如何让这个匿名的Javascript函数引用正确的变量?

例:

var o = {};
for(var i = 0; i < 5; i++) {
  o[i] = function () {
      console.log(i);
  };
}

o[3]();
Run Code Online (Sandbox Code Playgroud)

当我调用o3时,它总是在控制台上显示5,即使我调用o0,o4或其中任何一个.它将始终显示5,因为这是我的最后一个值.如何在创建匿名函数时显示i的值?在o3中应该在控制台中显示3.

javascript scope anonymous-function

2
推荐指数
1
解决办法
201
查看次数

将数组转换为内联字符串

将整数数组转换为枚举内联元素的字符串的最简单方法是什么?我在想像执行转换的匿名函数.

var array = new int[] { 1, 2 }
var s = string.Format("{0}", 
                      new [] 
                      { /*inline transform array into the string "1, 2"*/ });
Run Code Online (Sandbox Code Playgroud)

c# arrays anonymous-function

2
推荐指数
1
解决办法
1017
查看次数

如何在Matlab中嵌套匿名函数?

我有一个存储匿名函数的文件funcs.m.它们必须可以被目录中的文件使用.目前,我使用匿名函数,以便我funcs.m在不同的文件中执行该文件,但我认为这是一种错误的做事方式.其他函数如main.m及其嵌套函数nest.m需要使用funcs.m中的匿名函数.我认为路径不会解决这个问题,因为文件在同一个文件夹中.基本上我可以通过将匿名函数复制粘贴到每个文件来解决这个问题,但代码闻起来如此:

有没有办法在Matlab中重用具有anon函数的funcs.m?

的main.m

function main
funcs; % loads the anonymous functions
nest(par1,...,parN)
end
Run Code Online (Sandbox Code Playgroud)

nest.m

function nest(par1,...,parN)
funcs; %ERRR: This fires err, why? Look: this was sourced already in main.m!
function neededOnlyHere(par100)
    bq(q,A) %This needs the functions of the funcs
end

neededOnlyHere(somePar) %ERR to use the anon funcs from funcs
end
Run Code Online (Sandbox Code Playgroud)

函数main.m和nest.m使用此函数funcs.m具有匿名函数

bq=@(q,A) q*A;                              %Bolded q
I=@(ii,jj,A) find(A(ii,:)==1 & A(jj,:)==0); 
AiNotj=zeros(1,Ncut);                       
...
Run Code Online (Sandbox Code Playgroud)

错误

Attempt to add "bq" to a static workspace.
 See MATLAB Programming, Restrictions on
 Assigning to …
Run Code Online (Sandbox Code Playgroud)

matlab nested anonymous-function

2
推荐指数
1
解决办法
1854
查看次数

python中的名称是什么?

我知道什么是闭包,什么是lambda函数,但我想知道它的名称是什么:

>>> def foo(a, b):
>>>     return a + b
>>>
>>> bar = foo
>>> bar(1, 1)
>>> 2
Run Code Online (Sandbox Code Playgroud)

我只是想知道在变量中绑定函数的事实

python lambda closures anonymous-function

2
推荐指数
1
解决办法
69
查看次数

简化后台工作者的匿名方法

我试图通过按钮点击来创建我的所有代码,在后台工作程序中运行.所以我有以下代码模板.

BackgroundWorker backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += delegate
{
    //code
};
backgroundWorker.RunWorkerAsync();
while (backgroundWorker.IsBusy)
{
    Application.DoEvents();
} 
Run Code Online (Sandbox Code Playgroud)

只是想知道是否有一种简化此代码的方法,所以我没有有效地为所有按钮复制相同的代码块.

编辑:我试图运行的典型代码是:

//Synchronous task
Wait(2000);
//Synchronous task
return taskResult ? "Success" : "Failure"
Run Code Online (Sandbox Code Playgroud)

c# delegates anonymous-function backgroundworker

2
推荐指数
1
解决办法
752
查看次数

Clojure中的匿名函数

也许这听起来很荒谬,但对于我来说,仍然不能完全清楚#匿名函数应该来自何处.例如,在此示例中,我过滤了正数的除数:

(filter #(zero? (mod 6 %)) (range 1 (inc 6)))  ;;=> (1 2 3 6)
Run Code Online (Sandbox Code Playgroud)

但是在它# 之前放右(mod 6 %)会导致错误.在这种情况下我的匿名函数是否开始有规则,为什么要在此#之前出现(zero? ...

clojure anonymous-function

2
推荐指数
1
解决办法
409
查看次数

在julia 0.4中工作的匿名函数数组,而不是0.5.1

我正在将一些代码从Julia 0.4.7移植到0.5.1.我注意到有一些与匿名函数数组不兼容的东西.代码在这里:

f = x::Array{Function} -> size(x)

# Option 1    
f([k -> k+1, k-> k+1]) # This works in 0.4 & 0.5

# Option 2
f(repmat([k -> k+1], 2)) # This only works in 0.4
Run Code Online (Sandbox Code Playgroud)

据我所知,区别在于虽然在0.4中匿名数组仍然在内部被视为数组{Function,1},但在0.5中它看起来像数组{#11#12,1}(数字可能会改变),所以然后它引发一个MethodError,因此它们不匹配.

虽然这个例子很愚蠢但它显示了我真正需要的东西:复制匿名函数的次数可变.

谢谢!

arrays anonymous-function julia

2
推荐指数
1
解决办法
149
查看次数

将匿名函数扩展为字符串

我有一组匿名函数,我想将它们转换为字符串.通常我会使用func2str,但问题是我希望变量和内部函数扩展到它们的"真实"值.我遇到的问题是MATLAB通过名称保留它们,但是识别这些值.例

classdef Bclass

    properties
        equation
    end

    function obj = Bclass(inEquation, inValue)
        obj.equation = @(t,y) inEquation(t,y) * inValue;
    end

    function out = getStr(obj)
        out = func2str(obj.equation); 
    end
end
Run Code Online (Sandbox Code Playgroud)

问题是,当我真的希望它输出类似的东西时,如果我们说过,那么func2str调用正在输出.@(t,y) inEquation(t,y) * inValue@(t,y) t*y * 5b = Bclass(@(t,y) t*y, 5)

有没有办法从MATLAB中检索这些变量值?

string matlab scope anonymous-function

2
推荐指数
1
解决办法
96
查看次数

匿名函数的导数,而不在Matlab中定义符号变量

请考虑以下代码:

f = @(x) x.^2; 
Run Code Online (Sandbox Code Playgroud)

是否有可能将函数句柄的导数f作为另一个函数句柄,而不定义符号变量?

matlab anonymous-function derivative function-handle

2
推荐指数
1
解决办法
113
查看次数

在Perl中立即调用函数表达式(IIFE)的最佳方法?

借用Javascript一词,在perl中IIFE的“最佳实践”方法是什么?

我下面的测试代码是一个简单的循环,它调用匿名子程序并立即执行以构建子程序数组(这仅返回循环索引)。这主要是我想要的,但是我需要使用一个中间变量(而不是使用@_,它会在内部函数上更改)。

use warnings;
use strict;
my @funcs;
for(my $i=0;$i<3;$i++) {
    sub  {
        my $index=shift;
        $funcs[$index]=sub {$index};
    }
    -> ($i);
}

for (@funcs) {
    print &$_()."\n";
}
Run Code Online (Sandbox Code Playgroud)
#Output
0
1
2
Run Code Online (Sandbox Code Playgroud)

我知道我可以map用来重组这个问题。但撇开这一点,有没有更好的方法可以做到这一点?

更新资料

感谢@ikegami突出了一些要点。

仅出于对这个问题的未来看法,我对此有以下看法:

“迭代器” for循环的作用域(是否是地图?)与“ c样式” for循环的作用域不同。这样就完全不需要IIFE即可清理代码。甜。

更新2

以下代码显示了我所看到的差异。我并不是说一个比另一个更好,但是很高兴知道。我的输出是0 1 2,但第一个仅重复$ i的最后一个值(++运算符后为3)。

use warnings;
use strict;
my @funcs;
print "C loop direct assignment of sub\n";
for(my $i=0;$i<3;$i++) {
    $funcs[$i]= sub {$i};
}
print &$_()."\n" for @funcs;

print "C loop direct assignment of sub with variable\n";
for(my …
Run Code Online (Sandbox Code Playgroud)

perl anonymous-function

2
推荐指数
1
解决办法
96
查看次数