Lua 中的 const 和 close 关键字实际上有什么作用吗?

如何解决Lua 中的 const 和 close 关键字实际上有什么作用吗?

我很高兴地了解到,从 Lua 5.4 开始,Lua 支持常量 (CREATE TABLE public.site ( id integer NOT NULL,PRIMARY KEY (id) ); CREATE TABLE public.treatment_contract ( site_id integer NOT NULL,start_date date NOT NULL,end_date date NOT NULL,PRIMARY KEY (site_id,start_date,end_date),CONSTRAINT fk_treatment_contract__site FOREIGN KEY (site_id) REFERENCES public.site (id) MATCH SIMPLE ); CREATE TABLE public.machine ( id integer NOT NULL,PRIMARY KEY (id) ); CREATE TABLE public.machine_deployment ( site_id integer NOT NULL,machine_id integer NOT NULL,contract_start_date date NOT NULL,contract_end_date date NOT NULL,machine_id,CONSTRAINT fk_machine_deployment__machine FOREIGN KEY (machine_id) REFERENCES public.machine (id) MATCH SIMPLE,CONSTRAINT fk_machine_deployment__treatment_contract FOREIGN KEY (site_id,contract_start_date,contract_end_date) REFERENCES public.treatment_contract(site_id,CONSTRAINT chk_machine_deploiment_period CHECK (start_date <= end_date),CONSTRAINT chk_machine_deploiment_in_contract CHECK (pg_catalog.daterange(start_date,end_date,'[]') <@ pg_catalog.daterange(contract_start_date,contract_end_date,'[]')) ); CREATE TABLE public.treatment_datapoint ( site_id integer NOT NULL,time_stamp timestamp NOT NULL,time_stamp),CONSTRAINT fk_treatment_datapoint__treatment_contract FOREIGN KEY (site_id,CONSTRAINT chk_datapoint_in_contract CHECK (time_stamp::date <@ pg_catalog.daterange(contract_start_date,'[]')) ); ) 和要关闭的 (const) 变量!但是,在测试这些关键字时,它们似乎根本没有做任何事情。我编写了以下代码来对这些功能进行采样,以更好地了解它们的确切用法:

close

我将文件命名为 function f() local const x = 3 print(x) x = 2 print(x) end f() function g() local close x = {} setmetatable(x,{__close = function() print("closed!") end}) end g() 并使用 constCheck.lua 运行它。输出如下:

lua constCheck.lua

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

注意:x

解决方法

这是CREATE OR REPLACE TABLE my-dataset.trees_temp OPTIONS( expiration_timestamp=TIMESTAMP "2021-04-15 00:00:00 UTC" ) as ( SELECT t95.* FROM bigquery-public-data.new_york_trees.tree_census_1995 as t95 JOIN bigquery-public-data.new_york_trees.tree_census_2005 as t05 ON t95.diameter = t05.tree_dbh WHERE diameter > 30 ) 不是<const>const不是<close>

https://lwn.net/Articles/826134/

close

还有一些例子https://github.com/lua/lua/blob/master/testes/code.lua#L11

do local x <const> = 42 x = x+1 end -- ERROR: attempt to assign to const variable 'x'

https://github.com/lua/lua/blob/master/testes/files.lua#L128

local k0aux <const> = 0

,

来自Lua 5.4 Reference Manual : 3.3.7 - Local Declarations

每个变量名称都可以后缀由一个属性(尖括号之间的名称):

属性::= [‘’]

有两个可能的属性:const,它声明一个常量 变量,即不能在其后赋值的变量 初始化;和 close,它声明了一个要关闭的变量

例如,您必须编写 local x <const> = 3

您的代码 local const x = 3 相当于

local const = nil
x = 3

所以您实际上是在创建一个本地 nil 值 const 和一个全局数字值 x

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?