我偶然发现了这行代码,我不确定[ ? ]部分代表什么(我猜它是一种通配符,但我搜索了一段时间,没有找到任何东西):
['?'] = function() return is_canadian and "eh" or "" end我知道RHS是一个函数式三元运算符。我对LHS很好奇,它到底是什么。
编辑:参考(第二个示例):
http://lua-users.org/wiki/SwitchStatement
发布于 2021-01-18 15:12:25
实际上,这很简单。
local t = {
a = "aah",
b = "bee",
c = "see",它将每个字母映射到一个发音。在这里,a需要发音为aah,b需要发音为bee,依此类推。如果在american english或canadian english中,有些字母有不同的发音。因此,并不是每个字母都可以映射到一个声音。
z = function() return is_canadian and "zed" or "zee" end,
['?'] = function() return is_canadian and "eh" or "" end在映射中,字母z和字母?在american english或canadian english中具有不同的发音。当程序试图获得'?'的发音时,它将调用一个函数来检查用户是否想使用canadian english或另一种英语,该函数将返回zed或zee。
最后,以下两个符号具有相同的含义:
local t1 = {
a = "aah",
b = "bee",
["?"] = "bee"
}
local t2 = {
["a"] = "aah",
["b"] = "bee",
["?"] = "bee"
}发布于 2021-01-18 13:14:52
如果您仔细查看问题中链接的代码,您将看到这一行是表构造函数的一部分({}中的部分)。它本身并不是一个完整的声明。正如注释中所提到的,这将是表构造函数之外的语法错误。['?']只是一个字符串键。
发布于 2021-01-18 16:16:42
其他帖子已经解释了代码的作用,所以让我解释一下为什么它需要这样写。
{}中嵌入了['?'] = function() return is_canadian and "eh" or "" end
它是table constructor的一部分,并将函数值分配给字符串键'?'
local tbl = {a = 1}是local tbl = {['a'] = 1} or的语法糖
local tbl = {}
tbl['a'] = 1允许使用方便语法的字符串键必须遵循Lua's lexical conventions,因此只能包含字母、数字和下划线。它们不能以数字开头。
所以local a = {? = 1}是不可能的。它会导致语法错误,因此您必须像在local a = {['?'] = 1}中那样在方括号中显式地提供一个字符串值unexpected symbol near '?'
它们为每个表元素指定了自己的行
local a = {
1,
2,
3
}这极大地提高了长表格元素或非常长表格的可读性,并允许您保持最大行长度。
你会同意的
local tbl = {
z = function() return is_canadian and "zed" or "zee" end,
['?'] = function() return is_canadian and "eh" or "" end
}看起来要干净得多
local tbl = {z = function() return is_canadian and "zed" or "zee" end,['?'] = function() return is_canadian and "eh" or "" end}
https://stackoverflow.com/questions/65768269
复制相似问题