Nor*_*sey 133
Lua是Sol的后裔,这是一种为石油工程师设计的语言,没有正式的计算机编程培训.没有接受过计算机培训的人认为从零开始计算是非常奇怪的.通过采用基于1的阵列和字符串索引,Lua设计者避免混淆他们的第一个客户和赞助商的期望.
虽然我在开始时发现它们很奇怪,但我学会了喜欢基于0的数组.但是我可以使用Lua的基于1的数组,尤其是使用Lua的通用for循环和ipairs运算符 - 我通常可以避免担心数组的索引方式.
Mar*_*off 42
在Lua关于表格的第一次讨论中的编程中,他们提到:
由于您可以使用任何值索引表,因此您可以使用任何数字来启动数组的索引.但是,在Lua中习惯于使用1启动数组(而不是使用0,如在C中),并且有几个设施坚持这个约定.
后来,在关于数据结构的章节中,他们再次说了几乎相同的事情:Lua的内置工具假设基于1的索引.
无论如何,使用基于1的索引有几个便利.即,#(长度)操作:t[#t]访问表的最后一个(数字)指数,以及t[#t+1]访问1 过去的最后一个索引.对于尚未接触过基于0的索引的人来说,#t+1移动到列表末尾会更直观.还有Lua的for i = 1,#t构造,我认为它与前一点属于同一类别,"1到长度"比将"0到长度减去1"更为明智.
但是,如果你不能打破基于0的索引的思维模式,那么Lua基于1的索引肯定会成为一个障碍.最终,作者想要一些对他们有用的东西; 我承认我不知道他们最初的目标是什么,但从那时起它可能已经改变了.
joh*_*ala 23
有一个非常重要的原因是不从1开始计算数组:如果数组从零开始,您可以以自然的方式将它们用作代数环.例如,我们有一周(day={'mo', 'tu', 'we'...)的日子,我们希望通过它们循环.那么写下来的心态就会少得多:
nextday = day[(i+1)%7] as it is in almost every other language
Run Code Online (Sandbox Code Playgroud)
比:
nextday = day[i%7+1] as it is in lua
Run Code Online (Sandbox Code Playgroud)
起初似乎并不那么糟糕,但试着以另一种方式循环一周.
或者更一般地说:如果索引集缺少零,它缺少添加的中性元素.无论何时在索引计算中需要,都必须转移指数.
我是一名数学家,但我已经接受了这样一个事实,即在编程时,从零开始计算只是更好的选择.
das*_*ang 14
我的理解是,就是这样,因为作者认为这是一种很好的方式,并且在他们将语言推向公众之后,决定大大加重了.(我怀疑如果他们今天要改变它将会付出代价!)除此之外,我从未见过特别的理由.
Lua 库更喜欢使用从 1 开始的索引。但是,您可以使用任何您想要的索引。可以使用 0、可以使用 1、可以使用 -5。它甚至在他们的手册中,可以在(https://www.lua.org/pil/11.1.html)找到。
事实上,这里很酷的一点是内部 lua 库会将某些传递的 0 视为 1。使用 ipair 时要小心。
所以:("abc"):sub(0,1) == "a" and ("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
Run Code Online (Sandbox Code Playgroud)
小智 5
也许是一个不太重要的观点,但我还没有提到过:在字符串中的第一个和最后一个字符分别为1和-1而不是0和-1的事实中,存在更好的对称性.
| 归档时间: |
|
| 查看次数: |
47452 次 |
| 最近记录: |