标签: anonymous-function

哪些语言支持*递归*函数文字/匿名函数?

现在似乎有不少主流语言支持函数文字.它们也被称为匿名函数,但我不在乎它们是否有名称.重要的是函数文字是一个表达式,它产生一个尚未在别处定义的函数,因此例如在C中,&printf不计算.

编辑添加:如果你有一个真正的函数文字表达式<exp>,你应该能够将它传递给一个函数f(<exp>)或立即将它应用于一个参数,即.<exp>(5).

我很好奇哪些语言可以让你编写递归的函数文字.维基百科的" 匿名递归 "文章没有给出任何编程示例.

我们以递归因子函数为例.

以下是我所知道的:

  • JavaScript/ECMAScript可以用callee:

    function(n){if (n<2) {return 1;} else {return n * arguments.callee(n-1);}}
    
    Run Code Online (Sandbox Code Playgroud)
  • 在语言方面很容易letrec,例如Haskell(称之为let):

    let fac x = if x<2 then 1 else fac (x-1) * x in fac

    Lisp和Scheme中有等价物.请注意,绑定fac是表达式的局部,因此整个表达式实际上是一个匿名函数.

还有其他人吗?

recursion language-features function-literal anonymous-function letrec

16
推荐指数
4
解决办法
3141
查看次数

在MATLAB中使用匿名函数跳过输出

假设我想从一个返回两个输出的m文件函数创建一个匿名函数.是否可以设置匿名函数,使其仅返回m文件函数的第二个输出?

示例:ttest2返回两个输出,t/f和概率.如果我想使用t检验cellfun,我可能只对收集概率感兴趣,即我想写这样的东西

probabilities = cellfun(@(u,v)ttest2(u,v)%take only second output%,cellArray1,cellArray2)
Run Code Online (Sandbox Code Playgroud)

matlab anonymous-function

16
推荐指数
1
解决办法
5149
查看次数

如何编写通用的匿名方法?

具体来说,我想写这个:

public Func<IList<T>, T> SelectElement = list => list.First();
Run Code Online (Sandbox Code Playgroud)

但我得到一个语法错误T.我不能拥有通用的匿名方法吗?

c# generics anonymous-function

16
推荐指数
2
解决办法
7094
查看次数

Matlab - 用于匿名函数的循环

我对matlab很新,但我知道如何为循环和匿名函数做两件事.现在我想结合这些.

我想写:

sa = @(c) for i = 1:numel(biscs{c}), figure(i), imshow(biscs{c}{i}.Image), end;

但这是无效的,因为matlab似乎只想要换行符作为命令分隔符.我的代码以清晰的方式编写(没有函数头):

for i = 1:numel(biscs{c})
    figure(i)
    imshow(biscs{c}{i}.Image)
end
Run Code Online (Sandbox Code Playgroud)

我寻找一个解决方案,我可以用一个匿名函数在一行中编写它,就像我的第一个例子.如果我可以用另一种方式创建该函数,我也会很高兴,只要我不需要一个新的函数m文件.

matlab for-loop anonymous-function

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

什么是javascript匿名函数的生命周期?

如果我在全球范围内写这个:

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

是在执行语句后立即执行和销毁语句时创建的匿名函数?

如果我在函数中写这个:

function foo()
{
    var a=1;
    (function(){})();
    a++;
}
Run Code Online (Sandbox Code Playgroud)

匿名函数在foo返回之前是否存在,或者只是在执行该语句期间存在?

javascript anonymous-function lifetime

16
推荐指数
2
解决办法
1046
查看次数

15
推荐指数
1
解决办法
1344
查看次数

如何在MATLAB中创建一个"空"匿名函数?

在MATLAB中调试时,我使用匿名函数进行诊断打印.例如,

debug_disp = @(str) disp(str);
debug_disp('Something is up.')
...
debug_disp = @(str) disp([]);
% diagnostics are now hidden
Run Code Online (Sandbox Code Playgroud)

使用disp([])"狼吞虎咽"似乎对我来说有点脏; 有更好的选择吗?明显的(?)方法不起作用:

debug_disp = @(str) ;
Run Code Online (Sandbox Code Playgroud)

我认为这可以用于其他功能语言应用程序,而不仅仅是诊断打印.

matlab anonymous-function

15
推荐指数
2
解决办法
8706
查看次数

PHP - self,static或$ this in callback function

是否可以访问被引用的类/对象self,static以及$thisPHP中的匿名回调?像这样:

class Foo {
    const BAZ = 5;
    public static function bar() {
         echo self::BAZ; // it works OK
         array_filter(array(1,3,5), function($number) /* use(self) */ {
             return $number !== self::BAZ; // I cannot access self from here
         });
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让它像通常的变量一样使用use(self)子句?

php static callback self anonymous-function

15
推荐指数
1
解决办法
8915
查看次数

为什么这个匿名函数调用中缺少括号?

我正在读这本书,它有这个代码示例

function getFunction() {
    var result = [];
    for (var i = 0; i < 10; i++) {
        result[i] = function(num) {
            return function() {
                console.log("this is " + num);
            }
        }(i);
    };

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

它工作正常,但为什么这里的匿名函数没有包含在这样的括号中(function(...))(i);?在哪些情况下可以在匿名函数中省略括号?

javascript anonymous-function

15
推荐指数
2
解决办法
994
查看次数

为什么Kotlin有lambdas /匿名函数的两种语法?

Kotlin有两种声明匿名函数的方法(也就是lambda).两种不同的语法是:

val lambda =  { input : String -> 
  "received ${string}"
}
Run Code Online (Sandbox Code Playgroud)

val anonymousFunction =  fun (input : String): String {
  return "received ${string}"
}
Run Code Online (Sandbox Code Playgroud)

我理解两者之间的区别(如本答案中所述),但我不明白的是为什么语言有两种不同的方式来声明同一件事.

对于另一个经验,是否在工作中有优化?匿名函数版本是否过于冗长?lambda版本的语法不支持返回类型吗?

lambda anonymous-function kotlin

15
推荐指数
1
解决办法
848
查看次数