【发布时间】:2020-08-10 01:21:49
【问题描述】:
这甚至不会引发警告:
xquery version "3.1";
let $a := 1
let $a := 2
return $a
(: yields 2 in all runtimes I tested :)
为什么(函数式)编程语言允许变量重新声明?
我真的只是想了解它背后的理由。
我相信,通过在编译步骤拒绝这一点可以进行一些更积极的优化。
由于子作用域也知道局部变量,这只会为难以捕捉错误留下更多空间。
JavaScript 多年来一直使用 var 并最终通过引入 let 和 const 摆脱它。
这是一个可能难以跟踪值的示例。
xquery version "3.1";
let $f := function ($c) {
(: some code ... :)
let $b := $a
let $a := 2
let $c := $b
(: some more code ... :)
return ($a, $b, $c)
}
let $a := 1
return ($a, $f($a), $a)
在评估之前,您可能想先猜测一下。
【问题讨论】:
标签: xquery xquery-3.1