Lua 배열 (테이블)이 0이 아닌 1에서 시작하는 이유는 무엇입니까?
나는 Lua 의이 부분의 결정에 대한 근거를 이해하지. 색인 생성이 1에서 시작하는 이유는 무엇입니까? 나는 (다른 많은 사람들처럼) 이 위대한 논문 을 읽었습니다 . 배우고 프로그램 매우 즐거운 언어의 이상한 구석 인 것입니다. 나를 잘못 생각하지 마라, 루아는 훌륭하지만 어딘가에 설명이 될 것이다. 내가 웹에서 대부분의 대부분의 것 색인이 1에서 시작한다는 것입니다.
디자이너가 주제에 대해 읽는 것은 매우 흥미로울 것입니다.
나는 루아에서 "매우"초보자이며, 테이블에 대해 분명한 것을 절대로하지 마십시오.
Lua는 컴퓨터 프로그래밍에 대한 공식적인 교육을받지 않은 석유 엔지니어를 위해 언어 인 Sol의 그런입니다. 사람들은 0부터 계산을 시작하는 것이 이상하다고 생각합니다. Lua 설계자는 1 기반 배열 및 많은 인덱싱을 채택하고 첫 고객 및 스폰서의 기대를 혼란스럽게하지 않습니다.
처음에는 이상한 나타납니다 났지만 0 기반 배열을 좋아하는 법을 배웠습니다. 그러나 Lua의 1 기반 배열, 특히 Lua의 일반 for
루프와 ipairs
연산자를 사용 하면 문제 가 해결됩니다. 일반적으로 배열의 색인 생성 방식에 대해 걱정하지 않아도됩니다.
에 루아에서 프로그래밍 테이블의 첫 번째 토론, 토론 :
임의의 값으로 테이블을 인덱싱 할 수 있으므로 원하는 숫자로 배열의 준비를 시작할 수 있습니다. 그러나 Lua에서는 1로 배열을 시작하는 것이 일반적이며 (C와 같이 0이 아닌) 여러 시설이 규칙을 따릅니다.
나중에 데이터 구조에 관한 장에서 Lua의 내장 기능은 1 기반 인덱싱을 가정합니다.
어쨌든 1 기반 인덱싱을 사용 하면 몇 가지 편의가 있습니다. 즉, #
(길이) 연산자 : t[#t]
테이블의 마지막 ( 숫자) 보안 에 t[#t+1]
액세스 하고 마지막 보안을 지나 1에 액세스 합니다. 0 기반 인덱싱에 아직 노출되지 않은 사람에게는 #t+1
끝을 지나가는 것이 더 있습니다. 루아의 for i = 1,#t
구성 도 있는데 , "0에서 길이 -1"을 인덱싱하는 것보다 "길이에서 1까지"가 더 현명 할 수있는 이전 포인트와 같은 범주에 속한다고 생각합니다.
그러나 0 기반 인덱싱의 사고 방식을 깨뜨릴 수 있습니다 Lua의 1 기반 인덱싱은 확실히 방해가 될 수 있습니다. 궁극적으로,들은 저자 그들에게 효과가있는 것을 원 했습니다 . 원래 목표가 무엇 인지 모르지만 그 이후로 변경 될 수 있습니다.
1부터 배열을 계산하지 않는 한 가지 중요한 이유가 있습니다. 배열이 0에서 시작하면 자연스럽게 대수 고리로 사용할 수 있습니다. 예를 들어 우리는 요일이 ( 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
처음에는 그렇게 나쁘지는 않지만 방식으로 일주일 동안 자전거를 사용합니다.
또는 더 일반적으로 : 정책 세트에 0이 추가 할 중립 요소가 없습니다. 필요한 때마다 자재를 이동해야합니다.
나는 수학자이지만 프로그래밍에 체계는 0에서 계산하는 것이 더 나은 옵션이라는 사실을 받아 들었습니다.
저의 이해는 그것이 그것 때문에 그것을하는 좋은 방법이라고 생각합니다. 그리고 대중에게 언어를 공개 한 후에 결정이 상당히 석회화되었습니다. (그들이 오늘 그것을 바꾸어야한다면 지불해야 할 지옥이있을 것 같다!) 나는 그 이상의 특별한 약속을 본 적이 없다.
아마도 덜 중요한 점이지만 아직 언급되지 않은 것입니다. 대부분의 첫 번째 문자와 마지막 문자가 각각 0과 -1 대신 1과 -1에 사실에 더 나은 대칭이 있습니다.
table [0]은 항상 nil (null)을 반환합니다. 값을 직접 할당하지 테이블 [0] = 'some value'이고 table [0]은 사용자가 'some value'를 반환합니다.
예를 들면 다음과 같습니다.
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]))
루아 도서관은 1부터 시작하는 정책을 선호합니다. 그러나 원하는대로 사용할 수 있습니다. 0을 사용할 수 있으며 1을 사용할 수 있으며 -5를 사용할 수 있습니다. 심지어 매뉴얼에 있습니다 ( https://www.lua.org/pil/11.1.html ).
사실, 멋진 점은 내부 루아 라이브러리가 일부 0을 1로 처리한다는 것입니다. ipair를 사용할 수 있습니다.
따라서 ( "abc") : sub (0,1) == "a"및 ( "abc") : sub (1,1) == "a"는 true입니다.
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
진정한 이유는 언어가 포르투갈 법의 정의를 구현 한 지원 주요 개발 센터는 브라질에 있었으며 선호도는 0 또는 비어 있거나 아무것도 색인이나 자로 사용하지 않는 것입니다. 그러나이 언어는 일부 버전에서 함수를 작성하는 테이블에서 1 이외의 시작 색인을 사용할 수 있습니다.
모든 사람에게 의미가 있습니다.
table = {}
현재 table
비어 있습니다. 그렇게 할 때
table == {something}
표에는 table
의미가 무엇인지 알면 포함 하는 것이 색인 1입니다 .
내가 의미하는 것은 그 테이블 [0]이 존재하고 그 테이블 = {}인데, 그 테이블은 비어 있습니다. 이제 프로그래머는 빈 테이블을 호출하지 않고 테이블을 설정합니다. 빈을 찾는 것은 쓸모가 없습니다. 테이블을 호출 할 때마다 빈 테이블을 만드는 것이 더 간단합니다.
내 영어가 더 나아지지 않을 것이고 그것이 내 최고의 문법입니다. 마음에 들지 않으면 계속 읽지 않아도되지만 도움을 주려는 사람에게 -rep을 주면 사람들은 특히 문법과 같은 것을 전혀 돕고 싶지 않습니다. 나는 문법이 아니라 숫자와 vars의 사람입니다. 죄송합니다.
참고 URL : https://stackoverflow.com/questions/2785704/why-do-lua-arraystables-start-at-1-instead-of-0
'IT' 카테고리의 다른 글
Eclipse에서 TODO / FIXME / XXX 작업 태그를 어떻게 활성화합니까? (0) | 2020.07.16 |
---|---|
웹 앱의 사진을 파일 또는 데이터베이스에 저장 하시겠습니까? (0) | 2020.07.16 |
프로젝트 기능> Eclipse에서 정리 (0) | 2020.07.16 |
Rails 3.1 : 엔진과 가능한 가능한 앱 (0) | 2020.07.16 |
Twitter Bootstrap 3에 대한 오른쪽에서 왼쪽 지원 (0) | 2020.07.16 |