当前位置:  开发笔记 > 编程语言 > 正文

Delphi Prism/Oxygene中的Lambda表达式

如何解决《DelphiPrism/Oxygene中的Lambda表达式》经验,为你挑选了1个好方法。

我一直在试验Oxygene中的Lambda表达式.非常简单的递归lambda表达式来计算斐波那契数:

var fib : Func;
fib := n -> iif(n > 1, fib(n - 1) + fib(n - 2), n);
fib(3);

当我运行此代码时,我得到一个nullreferenceexception.关于我做错了什么的任何想法?



1> Barry Kelly..:

你没有做错任何事.如果有的话,编译器应该警告你在lambda体内使用fib,一个未赋值的变量.

但是编译器应该将fib作为一个位置捕获,这样当赋值完成并稍后调用委托时,就会正确分配fib并且递归应该按预期工作.

失败的最明显的可能原因是Prism不是捕获位置,而是捕获值,这些非常不直观,并且与非纯语言中的每个其他闭包实现不一致.

例如,在JavaScript中尝试此代码(与本文评论中的Craig断言相反,JavaScript也捕获位置,而不是值):









单击按钮后的警告框分别显示1和2,而按照Prism/Oxygene语义,它们将同时显示1.

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有