大佬教程收集整理的这篇文章主要介绍了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
。
以上是大佬教程为你收集整理的Lua 中的 const 和 close 关键字实际上有什么作用吗?全部内容,希望文章能够帮你解决Lua 中的 const 和 close 关键字实际上有什么作用吗?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。