gpt4 book ai didi

lua - 为什么表文字与Lua中的表引用区别对待?

转载 作者:行者123 更新时间:2023-12-04 13:19:39 25 4
gpt4 key购买 nike

这是一个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)指向该方向。

字符串文字和方法调用存在相同的问题。这是无效的:
"my literal":sub(1)

但这是有效的:
("my literal"):sub(1)

再次,Lua允许这样做:
func "my literal"

等效于此:
func( "my literal" )

关于lua - 为什么表文字与Lua中的表引用区别对待?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19331262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com