我不明白LUA这一部分决定背后的理由。为什么索引从1开始?我已经读过(就像许多其他人一样) 这篇很棒的论文. 。在我看来,这是一种非常愉快的学习和编程的语言的奇怪角落。不要误会我的意思,卢阿很棒,但是必须在某个地方进行解释。我发现的大部分(网络上)只是说索引从1开始。

阅读其设计师对这个主题的看法将非常有趣。

请注意,我在LUA中是“非常”的初学者,希望我不会错过有关桌子的明显内容。

有帮助吗?

解决方案

LUA是SOL的后裔,SOL是一种专为石油工程师设计的语言,没有计算机编程的正式培训。未经计算培训的人们认为,开始计数以零是怪异的。通过采用1个基于1个基于的阵列和字符串索引,LUA设计师避免了他们的第一批客户和赞助商的期望。

尽管我在一开始也发现它们很奇怪,但我学会了爱0个基于0的阵列。但是我可以选择LUA的1个基阵列,尤其是使用Lua的通用 for 循环和 ipairs 操作员 - 我通常可以避免担心数组的索引。

其他提示

LUA编程他们提到的第一次讨论表:

由于您可以将具有任何值的表索引,因此您可以以任何使您满意的数字启动数组的索引。但是,在LUA中,以1(而不是0,如C)开始阵列是习惯上的,并且有几个设施坚持使用此约定。

后来,在有关数据结构的一章中,他们又说了几乎相同的话:Lua的内置设施假设了1个基于索引。

无论如何,有一个 一对 便于使用1个基于索引的便利。即, # (长度)操作员: t[#t] 访问表的最后一个(数字)索引, t[#t+1] 访问1 过去的 最后一个索引。对于尚未接触0个基于0的索引的人 #t+1 越过列表的末尾将更加直观。还有卢阿的 for i = 1,#t 构造,我认为与上一点点“ 1到长度”的类别属于相同的类别,比将“ 0索引到长度为负1”更为明智。

但是,如果您无法打破基于0的索引的心态,那么Lua的1个基索引肯定会更具障碍。最终,作者想要一些适合的东西 他们;我承认我不知道他们的 原来的 目标是,但此后可能发生了变化。

有一个非常重要的理由不计数1的数组:如果数组从零开始,则可以自然方式将它们用作代数环。例如,我们有一周的日子(day={'mo', 'tu', 'we'...)我们想循环通过它们。然后,写作要少得多:

nextday = day[(i+1)%7]  as it is in almost every other language

比:

nextday = day[i%7+1] as it is in lua

一开始似乎还不错,但是尝试以另一种方式骑自行车。

或更一般地:如果索引集缺乏零,则缺乏添加的中性要素。每当需要在索引计算中需要时,就必须移动索引。

我是数学家,但我已经接受了一个事实,即在编程方面,从零计数只是更好的选择。

我的理解是,这仅仅是因为作者认为这是一个好方法,在向公众推出语言之后,决定大量钙化。 (我怀疑如果他们今天要更改它会付钱!)除此之外,我从未见过特别的理由。

也许是一个不太重要的观点,但是我还没有听到过提及的:有更好的对称性,因为弦乐中的第一个和最后一个字符分别为1和-1,而不是0和-1。

表[0]将始终返回nil(null),除非您自己为其分配值表[0] ='一些值',然后表[0]将返回您分配的“一些值”。

这里一个示例:

tbl={'some'}
print('tbl[0]='..tostring(tbl[0]))
print('tbl[1]='..tostring(tbl[1]))
nothing={}
print('nothing[0]='..tostring(nothing[0]))
print('nothing[1]='..tostring(nothing[1]))
nothing[0]='hey'
print('(after assign)\nnothing[0]='..tostring(nothing[0]))

LUA库更喜欢使用从1开始开始的索引,但是,您可以使用所需的任何索引。您可以使用0,可以使用1,可以使用-5。它甚至是在他们的手册中,可以找到(https://www.lua.org/pil/11.1.html).

实际上,内部Lua库会将某些通过的0视为1。使用iPairs时要谨慎。
因此:(“ abc”):sub(0,1)==“ a”和(“ abc”):sub(1,1)==“ a”是正确的。

 You can start an array at index 0, 1, or any other value:

-- creates an array with indices from -5 to 5
a = {}
for i=-5, 5 do
  a[i] = 0
end

真正的原因是该语言是葡萄牙法律中的定义的实施,主要的开发中心是在巴西,他们的偏爱是避免使用零或空或无作为索引或下标。但是,该语言确实允许在表格中使用1个以外的1个启动索引在某些版本中创建函数。

对于每个人来说都是有意义的,如果

table = {}

在这一刻, table 是空的。所以,什么时候

table == {something}

该表包含某些内容,因此它包含的是索引1 table 如果你明白我的意思。

我的意思是它的表[0],其表= {}的表= {},现在程序员不会调用一个空表,它将它们设置为它们,然后填充它,找到一个空的空表每次您要调用它时表,因此仅创建一个空表格就更简单了。

我的英语不会变得更好,这是我最好的语法。如果您不喜欢它,那么您可以随意不继续阅读它,而是为试图提供帮助的人提供-REP,使人们根本不想提供帮助,尤其是对于语法之类的东西。我是一个数字和VAR的人,而不是语法。对不起。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top