gpt4 book ai didi

delphi - Delphi Prism/Oxygene 中的 Lambda 表达式

转载 作者:行者123 更新时间:2023-12-03 18:09:13 25 4
gpt4 key购买 nike

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

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

当我运行这段代码时,我得到一个 nullreferenceexception。关于我做错了什么有什么想法吗?

最佳答案

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

然而,编译器应该将 fib 捕获为一个位置,以便在分配完成并且稍后调用委托(delegate)时,fib 被正确分配并且递归应该按预期工作。

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

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

<html>
<head>
<script language='javascript'>
function main()
{
var x = 1;
var f = function() { return x; };
alert(f());
x = 2;
alert(f());
}
</script>
</head>
<body>
<input type=button onclick="javascript:main()"></input>
</body>
</html>

单击按钮后的警告框分别显示 1 和 2,而根据 Prism/Oxygene 语义,它们两次都会显示 1。

关于delphi - Delphi Prism/Oxygene 中的 Lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/270350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com