你是否允许在lua表中使用数字键?

Rya*_*ach 0 lua dictionary lua-table

以下示例应该创建一个表,可以在数字和字符串之间转换,然后再返回,但无法运行.

是因为我在字典类型中使用数字键吗?或者是因为lua从1开始表索引?

有没有更好的方法来实现这一目标?

dyeColor = {
    0="black"    ,  black     = 0,
    1="red"      ,  red       = 1, 
    2="green"    ,  green     = 2,
    3="brown"    ,  brown     = 3,
    4="blue"     ,  blue      = 4,
    5="purple"   ,  purple    = 5,
    6="cyan"     ,  cyan      = 6,
    7="lightGray",  lightGray = 7,
    8="gray"     ,  gray      = 8,
    9="pink"     ,  pink      = 9,
    10="lime"     ,  lime      =10,
    11="yellow"   ,  yellow    =11,
    12="lightBlue",  lightBlue =12,
    13="magenta"  ,  magenta   =13,
    14="orange"   ,  orange    =14,
    15="white"    ,  white     =15}
Run Code Online (Sandbox Code Playgroud)

使用这个在线翻译(http://repl.it/languages/Lua)它给出了错误

[string "stdin"]:2: '}' expected (to close '{' at line 1) near '='attempt to call a nil value

Dou*_*rie 6

您需要将数字索引放在括号中:

dyeColor = {
    [0]="black"     ,  black     = 0,
    [1]="red"       ,  red       = 1, 
    [2]="green"     ,  green     = 2,
    [3]="brown"     ,  brown     = 3,
    [4]="blue"      ,  blue      = 4,
    [5]="purple"    ,  purple    = 5,
    [6]="cyan"      ,  cyan      = 6,
    [7]="lightGray" ,  lightGray = 7,
    [8]="gray"      ,  gray      = 8,
    [9]="pink"      ,  pink      = 9,
    [10]="lime"     ,  lime      =10,
    [11]="yellow"   ,  yellow    =11,
    [12]="lightBlue",  lightBlue =12,
    [13]="magenta"  ,  magenta   =13,
    [14]="orange"   ,  orange    =14,
    [15]="white"    ,  white     =15}
Run Code Online (Sandbox Code Playgroud)

你可以用以下方法节省一些打字:

dyeColor = {
    [0]="black"     ,
    [1]="red"       ,
    [2]="green"     ,
    [3]="brown"     ,
    [4]="blue"      ,
    [5]="purple"    ,
    [6]="cyan"      ,
    [7]="lightGray" ,
    [8]="gray"      ,
    [9]="pink"      ,
    [10]="lime"     ,
    [11]="yellow"   ,
    [12]="lightBlue",
    [13]="magenta"  ,
    [14]="orange"   ,
    [15]="white"    }

for i = 0, #dyeColor do dyeColor[dyeColor[i]] = i end
Run Code Online (Sandbox Code Playgroud)

Lua中允许NameS作为fieldspecS IN的形式,Name = exp而不是数字.数字必须放在括号中.现场参考也是如此.你可以说

dyeColor.black
Run Code Online (Sandbox Code Playgroud)

但不是

dyeColor.0 -- you may say dyeColor[0] of course
Run Code Online (Sandbox Code Playgroud)