标签: anonymous-function

Javascript:关闭循环?

我想做以下事情:

for (var i = 0; i < 10; ++i) {
    createButton(x, y, function() { alert("button " + i + " pressed"); }
}
Run Code Online (Sandbox Code Playgroud)

这个问题是我总是得到最终值,i因为Javascript的闭包不是按值.
那么我怎么能用javascript做到这一点?

javascript closures anonymous-function

5
推荐指数
2
解决办法
863
查看次数

除了使用php的eval之外还有另一种调用此函数的方法吗?

所以在数据库字段中有一个php函数.这是它的样子:

'$put_fname_fn = function($filename) {
    return $filename.'.Z';
};'
Run Code Online (Sandbox Code Playgroud)

我正在执行它:

$code = fetchFromDatabase(); // Get the function string
eval($code);
$put_fname_fn('MYFILE.TXT'); // Convert it to MYFILE.TXT.Z
Run Code Online (Sandbox Code Playgroud)

是否有更优雅的方式来调用用户功能?我尽量避免使用eval,但我没有其他方法来做到这一点.

php eval anonymous-function

5
推荐指数
1
解决办法
274
查看次数

我可以立即评估匿名函数吗?

可能重复:
立即执行匿名函数

我想立即评估一个匿名函数,而不是它在方法args中作为Closure对象出现.这可能吗?

例如:

$obj = MyClass;
$obj->Foo(function(){return "bar";}); // passes a Closure into Foo()
$obj->Foo(function(){return "bar";}()); // passes the string "bar" into Foo()?
Run Code Online (Sandbox Code Playgroud)

第3行是非法语法 - 有没有办法做到这一点?

谢谢

php lambda anonymous-function

5
推荐指数
1
解决办法
315
查看次数

在5.3之前的PHP中使用"create_function"比较器进行排序?

我以前从未在PHP中使用过匿名函数,但是我发现了一段代码,它使用一个代码来排序对象

usort($numTurnsPerUser,build_sorter('turns'));

function build_sorter($key) {
    return function ($a, $b) use ($key) {
        return strnatcmp($a[$key], $b[$key]);
    };
}
Run Code Online (Sandbox Code Playgroud)

此代码将通过键对对象进行排序(我传入"turn").例如,一个看起来像这样的对象:(用JSON编写,只是为了便于阅读)

$numTurnsPerUser = {
    "31":{
        "turns":15,
        "order":0
    }, "36":{
        "turns":12, 
        "order":1
    }, "37":{
        "turns":14, 
        "order":2
    }
}
Run Code Online (Sandbox Code Playgroud)

将被分类为如下所示的对象:

$numTurnsPerUser = {
    "36":{
        "turns":12,
        "order":1
    }, "37":{
        "turns":14,
        "order":2
    }, "31":{
        "turns":15, 
        "order":0
    }
}
Run Code Online (Sandbox Code Playgroud)

这在我的运行PHP 5.3.0的本地服务器上运行良好,但它无法在我的在线服务器上运行,运行"php5" - 我无法找到除此之外的任何信息.我收到了一个错误

解析错误:语法错误,意外T_FUNCTION

我读到PHP <5.3不能使用匿名函数,必须使用create_function,但匿名函数的"use"部分让我难以理解.有人可以向我解释一下该功能的"使用"部分是什么,或者更好的是,我如何将其"翻译"到所需的create_function参数?

php sorting anonymous-function

5
推荐指数
1
解决办法
868
查看次数

如何在Erlang中使用闭包?

我有两个列表:L和E.我尝试编写一个函数,它返回另一个列表,其中包含L中元素的出现次数.

-module(mymodule).
-export([count/2]).
-export([numberOfOccurences/2]).

count([Head|Tail], Counter) ->
  fun(Element) -> if
    [Head|Tail] == [] -> Counter;
    Element == Head -> count(Tail, Counter + 1);
    Element /= Head -> count(Tail, Counter)
  end
end.

numberOfOccurences(L, E) -> 
    lists:map(count(L, 0), E).
Run Code Online (Sandbox Code Playgroud)

mymodule:numberOfOccurences[1,2,"abc",2,1,"abc",4,1,1], [1,2,3,"abc"])应该回来[4,2,0,2].但它返回一个包含4个函数的列表.我究竟做错了什么?

erlang closures functional-programming list anonymous-function

5
推荐指数
1
解决办法
1506
查看次数

定点组合器

我是定点组合器世界的新手,我猜他们已经习惯了匿名的lambdas,但我还没有真正使用它们,甚至无法完全绕过它们.

我在Javascript中看到了Y-combinator的例子,但是还没能成功运行它.

这里的问题是,有人可以给出一个直观的答案:

  • 什么是定点组合器(不仅在理论上,而且在某些示例的上下文中,揭示该上下文中的定点究竟是什么)?
  • 除了Y-combinator之外,还有哪些其他类型的定点组合器?

奖励积分:如果示例不仅仅是一种语言,最好也是在Clojure中.

更新:

我已经能够在Clojure中找到一个简单的例子,但仍然发现很难理解Y-Combinator本身:

(defn Y [r]
  ((fn [f] (f f))
   (fn [f]
     (r (fn [x] ((f f) x))))))
Run Code Online (Sandbox Code Playgroud)

虽然这个例子很简洁,但我发现很难理解函数中发生了什么.提供的任何帮助都是有用的.

functional-programming y-combinator anonymous-function higher-order-functions fixpoint-combinators

5
推荐指数
1
解决办法
1296
查看次数

在Julia中使用匿名函数的性能损失

我注意到在Julia中使用匿名函数会导致性能下降.为了说明我有两个quicksort实现(取自Julia发行版中的微观性能基准).第一种按升序排序

function qsort!(a,lo,hi)
    i, j = lo, hi
    while i < hi
        pivot = a[(lo+hi)>>>1]
        while i <= j
            while a[i] < pivot; i += 1; end
            while pivot < a[j]; j -= 1; end
            if i <= j
                a[i], a[j] = a[j], a[i]
                i, j = i+1, j-1
            end
        end
        if lo < j; qsort!(a,lo,j); end
        lo, j = i, hi
    end
    return a
end
Run Code Online (Sandbox Code Playgroud)

第二个需要一个额外的参数:一个匿名函数,可用于指定升序或降序排序,或比较更奇特的类型

function qsort_generic!(a,lo,hi,op=(x,y)->x<y)
    i, j = lo, hi
    while i < hi
        pivot = …
Run Code Online (Sandbox Code Playgroud)

performance anonymous-function julia

5
推荐指数
3
解决办法
892
查看次数

作为参数传递的函数总是回调吗?JavaScript

如果我有下面的代码,我将两个函数作为参数传递给 function sayHi,这是回调的示例吗?

我注意到有两种运行这些“参数函数”的方法:要么如下所示,我们在定义它们的地方调用函数(作为参数),要么在 sayHi 函数中调用参数。这是回调函数和匿名函数之间的区别吗?

function sayHi(name, testForTrue) {
    if (testForTrue == true) {
        console.log(name);
    }
}

sayHi(function() {
    return 'Zach'
}(), function() {
    return true;
}());
Run Code Online (Sandbox Code Playgroud)

我可以获得相同结果的另一种方法如下。在这种情况下,我在不同的时间评估函数?两者之间有什么实际区别吗?

function sayHi(name, testForTrue) {
    if (testForTrue() == true) {
        console.log(name());
    }
}

sayHi(function() {
    return 'Zach'
}, function() {
    return true;
});
Run Code Online (Sandbox Code Playgroud)

javascript callback anonymous-function

5
推荐指数
1
解决办法
1028
查看次数

如何在 PHP 中将多个参数传递给匿名函数?

PHP 5.3+ 支持匿名函数(尽管在 PHP 7.x+ 中,它对匿名函数的支持在绑定方面略有不同)。我正在运行 PHP 5.6.x

是否有一种语法允许将多个参数传递给用作回调的匿名函数(而不是仅使用数组。以下哪些示例(如果有)可以在 PHP 中实现?

实施例1

function ($str1, $str2 ){   //But, that would be too easy, right?
    return $str1 . $str2;
}
Run Code Online (Sandbox Code Playgroud)

实施例2

function () use ($string, $min, $max) {  // Not seeing this in the manual.
    $length = mb_strlen($string, 'UTF-8');
    return ($length >= $min) && ($length <= $max);
}
Run Code Online (Sandbox Code Playgroud)

实施例3

只是出于好奇,这种形式可能吗?

function ($str1, $str2 ) use ($int1, $int2) { // But, that would be in the …
Run Code Online (Sandbox Code Playgroud)

php callback anonymous-function

5
推荐指数
1
解决办法
5837
查看次数

从映射函数返回多个值

假设我有一个名为 trig 的函数,它返回两个输出:

function trig(x)
    return(sin(x), cos(x))
end
Run Code Online (Sandbox Code Playgroud)

如果我想评估多个值的三角函数,我可以使用 map 函数:

julia> out = map(trig, (0:(pi/12):(pi/2)))
Run Code Online (Sandbox Code Playgroud)

out 是一个 7 元素数组,每个元素中都有一个包含两个元素的元组:

julia> out
7-element Array{Tuple{Float64,Float64},1}:
(0.0,1.0)
(0.258819,0.965926)
(0.5,0.866025)
(0.707107,0.707107)
(0.866025,0.5)
(0.965926,0.258819)
(1.0,6.12323e-17)
Run Code Online (Sandbox Code Playgroud)

我的问题是:解开正弦和余弦的最佳方法是什么,以便我有两个数组,每个数组有 7 个元素?是否可以在不创建多余的元组数组的情况下广播三角函数,而是直接创建我真正感兴趣的两个数组?

目前,我再次调用 map 以便从 out 中提取值以填充我想要的数组,但我认为这不是执行此操作的最佳方法:

sines = map(x->x[1], out)
cosines = map(x->x[2], out)
Run Code Online (Sandbox Code Playgroud)

出于本问题的目的,假设 trig 是一个计算量大的函数。因此,请不要给我一个需要多次评估 trig 的答案。

arrays function anonymous-function julia

5
推荐指数
1
解决办法
1111
查看次数