標籤:

Lua 為什麼數組下標從 1 開始?

這不符合其他語言從0開始啊。


可以參考這個答案。Lua 的 table 索引默認從 1 開始,這樣做有什麼好處?


lua中1表示第一個,-1表示最後一個

這不挺好


因為一開始面向的用戶不是程序員,所以用了1。


從0開始才不正常,從1開始是邏輯,那是C要偏移位沒辦法。C從0開始是處於底層相關,從地址頭部起偏移幾個相位。


隨手貼個笑話...

Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.


留著,占坑,待會兒回去講。

----------------------------------------------

起始,原因並沒有像大家猜測的那樣。在官網lua-users wiki: Lua Faq和非非官網Lua Unofficial FAQ (uFAQ)都提到過這個問題。這裡,貼一下其回答內容:

1.5.1 Why do Lua arrays count from one?

Oddly, the thing that really gets some people overexcited is that in Lua array indices count from one.

In mathematical notation array indices count from one, and so does Lua. In other words, they are not offsets.

The historical reason (see The Evolution of Lua) is that Lua evolved to solve engineering needs at the Brazillian state oil company (Petrobras). It was designed for engineers who were not professional programmers and more likely to be used to FORTRAN.

You can make your arrays start with zero, but the standard library functions (such as table.concat) will not recognise the zeroth entry. And # will return the size minus one.

t = {[0]=0,10,20,30} -- table constructor is a little clunky
for i = 0,#t do print(i,t[i]) end -- not 0,#t-1 !

大概翻譯下,就是兩個原因,一個是由於數學上的數組是從1開始,因此lua也延續了這個特性:另一個歷史原因是由於lua當時是為了巴西一家石油公司解決工程需要而開發的,使用的人都是一些傳統工程師,因此並不是那麼專業,跟像FORTRAN語言(其實,我根本不懂這個語言)。


為什麼不能從1開始

難道一定要跟c語言一樣反人類從0開始嗎


我忘記從哪裡看來的了。大概原因是Lua的作者是巴西人,巴西人和中國人對於數字的觀念是一樣的,認為1是自然數的開始;而C語言是美國人設計的,歐美人一般認為0是數字的開始。PS:好像0的概念出現比1,2,3……的概念出現要晚好久。


lua是非主流


其實數組(不是數學領域的數組,可以看成放東西的格子櫃)和數是不一樣的,從1開始確實直觀,1代表第一個數,只不過編程語言編寫時想經可能向數學靠攏,所以造成了從0開始的情況。

凡是提出『』為什麼數組不是從1開始的『』人,都理解的是數組是放東西的地方,所以有1個算1個,有2個記2個


pascal算古董了吧,pascal可以定義任意數字開始……


你說的其他語言是指C家族吧?


0是後發明的, 先有的1


從1計數是反科學的。

如果個位數從1開始計數,為什麼十位,百位數要從0開始計數?

所以,最小的一位數是1, 最小的兩位數11, 最小的三位數是111?


推薦閱讀:

Lua元表有哪些讓人感覺到精彩的應用?
Unity手游開發札記——ToLua#集成內存泄露檢查和性能檢測工具
Lua程序逆向之Luac文件格式分析
【遊戲框架系列】詩情畫意
用好Lua+Unity,讓性能飛起來—LuaJIT性能坑詳解

TAG:Lua |