Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua中的const和close关键字真的起作用了吗?_Lua_Scope_Constants_Local Variables - Fatal编程技术网

Lua中的const和close关键字真的起作用了吗?

Lua中的const和close关键字真的起作用了吗?,lua,scope,constants,local-variables,Lua,Scope,Constants,Local Variables,我很兴奋地得知,从Lua5.4开始,Lua支持常量(const)和待关闭(close)变量!然而,在测试这些关键字时,它们似乎什么都没做。我编写了以下代码来对这些功能进行示例,以便更好地掌握它们的确切用法: 函数f() 局部常数x=3 打印(x) x=2 打印(x) 结束 f() 函数g() 局部闭x={} setmetatable(x,{{uuuu close=function()print(“closed!”)end}) 结束 g() 我将文件命名为constCheck.lua,并使用lu

我很兴奋地得知,从Lua5.4开始,Lua支持常量(
const
)和待关闭(
close
)变量!然而,在测试这些关键字时,它们似乎什么都没做。我编写了以下代码来对这些功能进行示例,以便更好地掌握它们的确切用法:

函数f()
局部常数x=3
打印(x)
x=2
打印(x)
结束
f()
函数g()
局部闭x={}
setmetatable(x,{{uuuu close=function()print(“closed!”)end})
结束
g()
我将文件命名为
constCheck.lua
,并使用
luaconstcheck.lua
运行它。结果如下:

3
2
我希望调用
f()
时出错,或者至少它打印
3
两次,但它似乎重新分配了
x
,没有任何问题。此外,当
x
在函数末尾离开作用域时,我希望对
g()
的调用打印出“closed!”,但这没有发生。我找不到很多关于这些关键词用法的例子。我是否正确使用它们?它们有用吗

注:
lua-v=>lua 5.4.0版权所有(C)1994-2020 lua.org,PUC Rio

这是
常量
,和
关闭

do
局部x=42
x=x+1
结束
--错误:试图分配给常量变量“x”
还有一些例子

localk0aux=0

local f=assert(io.open(文件,“w”))

每个变量名都可以通过一个属性(尖括号之间的名称)进行后置():

属性::=['']

有两个可能的属性:const,它声明了一个常量 变量,即不能在其 初始化;和close,它将一个变量声明为close

例如,您必须编写
localx=3

您的代码
本地常量x=3
相当于

local const = nil
x = 3

因此,您下次实际创建的是一个本地nil值
const
和一个全局数值
x

,如果您想知道如何正确使用Lua功能,最好参考Lua参考手册。猜测语法从来都不是一个好主意。是的,我尝试过,但我不习惯Lua手册的组织方式。索引中对常量的唯一引用是关于C API的,当我在手册正文中搜索“const”时,我得到了很多关于“construct”的结果,因此我试图通过添加空格(“const”)缩小搜索范围,但对const关键字的唯一引用后面是逗号,因此,我再次主要得到了关于C API的结果。我当时不知道这是当地的独家声明,也不想去那里查看。我明白了。这确实有助于澄清为什么我的代码不是语法错误。我并没有想到局部变量可以声明为未初始化,因为对于全局变量,初始化和声明似乎不是不同的概念。