Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/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异常变量名(问号变量)_Lua - Fatal编程技术网

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

Lua异常变量名(问号变量),lua,Lua,我偶然发现了这行代码,我不确定[?]部分代表了什么我猜这是一种通配符,但我搜索了一会儿,没有找到任何东西: ['?'] = function() return is_canadian and "eh" or "" end 我知道RHS是一个三元函数运算符。我很好奇LHS和它到底是什么 编辑:参考第二个示例: 如果仔细查看问题中链接的代码,您将看到此行是表构造函数的一部分,{}中的部分。它本身并不是一个完整的声明。如注释中所述,这将是表构造函数之外的语法错

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

['?'] = function() return is_canadian and "eh" or "" end
我知道RHS是一个三元函数运算符。我很好奇LHS和它到底是什么

编辑:参考第二个示例:


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

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

实际上,它很简单

  local t = {
    a = "aah",
    b = "bee",
    c = "see",
它将每个字母映射到一个发音。这里,a需要发音为aah,b需要发音为bee等等。有些字母在美国英语或加拿大英语中的发音不同。因此,并不是每个字母都可以映射到单个声音

z = function() return is_canadian and "zed" or "zee" end,
['?'] = function() return is_canadian and "eh" or "" end
在映射中,字母z和字母?在美国英语或加拿大英语中有不同的发音。当程序试图获取“?”的发音时,它将调用一个函数来检查用户是否要使用加拿大英语或其他英语,并且该函数将返回zed或zee

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

  local t1 = {
    a     = "aah",
    b     = "bee",
    ["?"] = "bee"
  }

  local t2 = {
    ["a"] = "aah",
    ["b"] = "bee",
    ["?"] = "bee"
  }

其实很简单

  local t = {
    a = "aah",
    b = "bee",
    c = "see",
它将每个字母映射到一个发音。这里,a需要发音为aah,b需要发音为bee等等。有些字母在美国英语或加拿大英语中的发音不同。因此,并不是每个字母都可以映射到单个声音

z = function() return is_canadian and "zed" or "zee" end,
['?'] = function() return is_canadian and "eh" or "" end
在映射中,字母z和字母?在美国英语或加拿大英语中有不同的发音。当程序试图获取“?”的发音时,它将调用一个函数来检查用户是否要使用加拿大英语或其他英语,并且该函数将返回zed或zee

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

  local t1 = {
    a     = "aah",
    b     = "bee",
    ["?"] = "bee"
  }

  local t2 = {
    ["a"] = "aah",
    ["b"] = "bee",
    ["?"] = "bee"
  }

其他帖子都解释了代码的作用,所以让我解释一下为什么需要这样写

['?']=函数返回为_canadian,eh或end嵌入在{}

它是a的一部分,并为字符串键“?”指定一个函数值

局部tbl={a=1}是局部tbl={['a']=1}或

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

所以局部a={?=1}是不可能的。它将导致“?”附近出现意外符号的语法错误,因此必须在方括号中显式提供字符串值,如局部a={['?']=1}

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

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
}
看起来比以前干净多了


本地tbl={z=函数返回是_-canadan和zed或zee-end,['?']=函数返回是_-canadan和eh或end}

其他帖子都解释了代码的功能,所以让我解释一下为什么需要这样编写

['?']=函数返回为_canadian,eh或end嵌入在{}

它是a的一部分,并为字符串键“?”指定一个函数值

局部tbl={a=1}是局部tbl={['a']=1}或

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

所以局部a={?=1}是不可能的。它将导致“?”附近出现意外符号的语法错误,因此必须在方括号中显式提供字符串值,如局部a={['?']=1}

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

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=函数返回是_canadian和zed或zee end,['?']=函数返回是_canadian和eh或end}

没有上下文很难说,但这个表似乎描述了一些对话中问题的答案:有人打印了吗?如果全局/upvalue为true或nothing,则接收eh。这几乎不是什么语法上的甜点:t。?将导致语法错误。桌子钥匙?没有什么特别的意义。@AlexanderMashin是什么让你认为这是一张桌子?没有前缀,例如x[?],它实际上只是LHS上的访问操作符[],没有任何意义
在大多数编程语言中,它类似于使用+=函数printhi-end.['?']=函数返回为_-canada,而eh或end应该是表声明的一部分,例如,本地t={['?']=函数返回为_-canada,eh或end},或者设置一个表字段:t['?']=函数返回为_-canada,而eh或end。在表之外,它将导致语法错误。当然,这也可以是带有_newindex metamethod的userdata。没有上下文很难说,但这个表似乎描述了一些对话中问题的答案:有人打印?如果全局/upvalue为true或nothing,则接收eh。这几乎不是什么语法上的甜点:t。?将导致语法错误。桌子钥匙?没有什么特别的意义。@AlexanderMashin是什么让你认为这是一张桌子?没有前缀,例如x[?],它实际上只是LHS上的访问操作符[],在大多数编程语言中没有意义,它类似于使用+=函数printhi-end。['?']=函数返回是_-canadian,eh或end应该是表声明的一部分,例如,本地t={['?']=函数返回是_-canadian,eh或end}或者设置一个表字段:t['?']=函数返回值为_,eh或end。在表之外,它将导致语法错误。当然,这也可以是带有_newindex metamethod的userdata。我给了另一个人最好的答案,只是因为他们的答案更详细,并且有一些例子,尽管你的答案也很好!我给了另一个人最好的答案,只是因为他们的答案更详细,并且有一些例子,你的答案也很好!我已经给了另一个人答案,因为他们是第一个向我提供详细答案的人,但是你的答案是前2名!我已经给了另一个人答案,因为他们是第一个向我提供详细答案的人,但是你的答案是前2名!谢谢你的回答,这很有道理!一个问题是,为什么最后一个例子是相同的?我一直认为Lua表是其他编程语言的映射,因此每个元素都有key+值。在我看来,[a]=aah将字符串映射到字符串类型的键。我不确定a是什么。@Shibalicious在我的回答中解释了这一点。{a=aah}是{[a]=aah}的缩写。请仔细阅读。当Robert解释代码是什么时,我解释了为什么需要这样写。由于a是一个字母,因此可以是一个Lua名称,您可以在更短的语法中使用它。实际上,{[a]=aah}将键a映射到值aah。这个符号是冗长的,Lua提供了一种缩短它的方法,因此有一个符号{a=aah},它做完全相同的事情。但这种特殊的符号并不适用于所有字符,例如?、*、!。所以{[a]=aah}等价于{a=aah},但是{[?]=test}不能用特殊符号表示。{?=aah}是一个语法错误。@Robert很抱歉这么晚才回复,谢谢,非常有意义!谢谢你的回答,这很有道理!一个问题是,为什么最后一个例子是相同的?我一直认为Lua表是其他编程语言的映射,因此每个元素都有key+值。在我看来,[a]=aah将字符串映射到字符串类型的键。我不确定a是什么。@Shibalicious在我的回答中解释了这一点。{a=aah}是{[a]=aah}的缩写。请仔细阅读。当Robert解释代码是什么时,我解释了为什么需要这样写。由于a是一个字母,因此可以是一个Lua名称,您可以在更短的语法中使用它。实际上,{[a]=aah}将键a映射到值aah。这个符号是冗长的,Lua提供了一种缩短它的方法,因此有一个符号{a=aah},它做完全相同的事情。但这种特殊的符号并不适用于所有字符,例如?、*、!。所以{[a]=aah}等价于{a=aah},但是{[?]=test}不能用特殊符号表示。{?=aah}是一个语法错误。@Robert很抱歉这么晚才回复,谢谢,非常有意义!