首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Lua异常变量名(问号变量)

Lua异常变量名(问号变量)
EN

Stack Overflow用户
提问于 2021-01-18 10:59:29
回答 3查看 177关注 0票数 1

我偶然发现了这行代码,我不确定[ ? ]部分代表什么(我猜它是一种通配符,但我搜索了一段时间,没有找到任何东西):

代码语言:javascript
运行
复制
['?'] = function() return is_canadian and "eh" or "" end

我知道RHS是一个函数式三元运算符。我对LHS很好奇,它到底是什么。

编辑:参考(第二个示例):

http://lua-users.org/wiki/SwitchStatement

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-01-18 15:12:25

实际上,这很简单。

代码语言:javascript
运行
复制
  local t = {
    a = "aah",
    b = "bee",
    c = "see",

它将每个字母映射到一个发音。在这里,a需要发音为aahb需要发音为bee,依此类推。如果在american englishcanadian english中,有些字母有不同的发音。因此,并不是每个字母都可以映射到一个声音。

代码语言:javascript
运行
复制
z = function() return is_canadian and "zed" or "zee" end,
['?'] = function() return is_canadian and "eh" or "" end

在映射中,字母z和字母?american englishcanadian english中具有不同的发音。当程序试图获得'?'的发音时,它将调用一个函数来检查用户是否想使用canadian english或另一种英语,该函数将返回zedzee

最后,以下两个符号具有相同的含义:

代码语言:javascript
运行
复制
  local t1 = {
    a     = "aah",
    b     = "bee",
    ["?"] = "bee"
  }

  local t2 = {
    ["a"] = "aah",
    ["b"] = "bee",
    ["?"] = "bee"
  }
票数 3
EN

Stack Overflow用户

发布于 2021-01-18 13:14:52

如果您仔细查看问题中链接的代码,您将看到这一行是表构造函数的一部分({}中的部分)。它本身并不是一个完整的声明。正如注释中所提到的,这将是表构造函数之外的语法错误。['?']只是一个字符串键。

票数 3
EN

Stack Overflow用户

发布于 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的语法糖

代码语言:javascript
运行
复制
local tbl = {}
tbl['a'] = 1

允许使用方便语法的字符串键必须遵循Lua's lexical conventions,因此只能包含字母、数字和下划线。它们不能以数字开头。

所以local a = {? = 1}是不可能的。它会导致语法错误,因此您必须像在local a = {['?'] = 1}中那样在方括号中显式地提供一个字符串值unexpected symbol near '?'

它们为每个表元素指定了自己的行

代码语言:javascript
运行
复制
local a = {
    1,
    2,
    3
}

这极大地提高了长表格元素或非常长表格的可读性,并允许您保持最大行长度。

你会同意的

代码语言:javascript
运行
复制
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}

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65768269

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档