为什么在表格文字引用与Lua表格引用上存在如此明显的处理差异?

2026-04-01 19:241阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计461个文字,预计阅读时间需要2分钟。

为什么在表格文字引用与Lua表格引用上存在如此明显的处理差异?

这是一个Lua 5.2.2脚本,展示了表的声明和索引:

luamylist={'foo', 'bar'}print(mylist[1])

以下声明为什么不符合语法?

luaprint({['foo', 'bar'][1]})

错误原因:在Lua中,要访问数组元素,应使用方括号`[]`和索引,而不是花括号`{}`。正确的语法应该是:

luaprint({'foo', 'bar'}[1])

这是一个Lua 5.2.2脚本,显示了表的声明和索引:

> mylist = {'foo', 'bar'} > print(mylist[1]) foo

以下声明为何不合法?

> print({'foo', 'bar'}[1]) stdin:1: ')' expected near '['

我想不出任何其他语言,其中文字不能替代参考(当然,除非需要左值).

FWIW,使表格文字具有括号,使声明合法:

> print(({'foo', 'bar'})[1]) foo 这也与Lua这个语法有效的事实有关:

myfunc { 1, 2, 3 }

它相当于:

myfunc( { 1, 2, 3 } )

因此表达式如:

myfunc { 1, 2, 3 } [2]

被解析为:

myfunc( { 1, 2, 3 } )[2]

所以首先评估函数调用,然后进行索引.

如果{1,2,3} [2]可以被解析为有效的索引操作,则可能导致前一个表达式中出现歧义,这需要更多的前瞻性. Lua团队选择通过使其成为单通道编译器来快速制作Lua字节码编译器,因此它只使用最少的前瞻扫描源代码一次.朝那个方向This message to lua mailing list from Roberto Ierusalimschy (lead Lua developer)点.

字符串文字和方法调用存在同样的问题.这是无效的:

为什么在表格文字引用与Lua表格引用上存在如此明显的处理差异?

"my literal":sub(1)

但这是有效的:

("my literal"):sub(1)

再一次,Lua允许这样:

func "my literal"

等同于此:

func( "my literal" )

本文共计461个文字,预计阅读时间需要2分钟。

为什么在表格文字引用与Lua表格引用上存在如此明显的处理差异?

这是一个Lua 5.2.2脚本,展示了表的声明和索引:

luamylist={'foo', 'bar'}print(mylist[1])

以下声明为什么不符合语法?

luaprint({['foo', 'bar'][1]})

错误原因:在Lua中,要访问数组元素,应使用方括号`[]`和索引,而不是花括号`{}`。正确的语法应该是:

luaprint({'foo', 'bar'}[1])

这是一个Lua 5.2.2脚本,显示了表的声明和索引:

> mylist = {'foo', 'bar'} > print(mylist[1]) foo

以下声明为何不合法?

> print({'foo', 'bar'}[1]) stdin:1: ')' expected near '['

我想不出任何其他语言,其中文字不能替代参考(当然,除非需要左值).

FWIW,使表格文字具有括号,使声明合法:

> print(({'foo', 'bar'})[1]) foo 这也与Lua这个语法有效的事实有关:

myfunc { 1, 2, 3 }

它相当于:

myfunc( { 1, 2, 3 } )

因此表达式如:

myfunc { 1, 2, 3 } [2]

被解析为:

myfunc( { 1, 2, 3 } )[2]

所以首先评估函数调用,然后进行索引.

如果{1,2,3} [2]可以被解析为有效的索引操作,则可能导致前一个表达式中出现歧义,这需要更多的前瞻性. Lua团队选择通过使其成为单通道编译器来快速制作Lua字节码编译器,因此它只使用最少的前瞻扫描源代码一次.朝那个方向This message to lua mailing list from Roberto Ierusalimschy (lead Lua developer)点.

字符串文字和方法调用存在同样的问题.这是无效的:

为什么在表格文字引用与Lua表格引用上存在如此明显的处理差异?

"my literal":sub(1)

但这是有效的:

("my literal"):sub(1)

再一次,Lua允许这样:

func "my literal"

等同于此:

func( "my literal" )