홈 > 종합게시판
총 0 건, 페이지
구) 자유게시판
전체공개  [잡담] 루아스크립트 독학 3회차
작성일 2018-04-21 22:34:45 조회수 345 댓글수 0 추천수 0 비추천수 0
작성자 알바
레벨 10 (210.♡.117.242)
경험치 10915
회원가입일 2014-12-29 21:14:09
작성글보기
서명도 수정해봅니다

본문


조건문...

 

4가지 밖에 없다

 

if

while

repeat

for

 

네가지 밖에 없으니 좋다

 

 

if 문...

 

 

 

if i==0 then
  print("It's Zero.")
elseif i==1 then
  print("It's One.")
else
  print("Unknown")
end 

베이직에서 쓰던 것 처럼  if than else end 

 

 

 

while 과 repear

 

 

while 비교 조건 do
  -- 명령어들
end

 

repeat
  -- 명령어들
until 비교 조건

 

조건이 맞으면 반복 실행하는게 while

일단 반복하고 멈추는 조건이 뒤에 나오는게 repeat

 

1부터 9까지 더하는걸 예로 들면


a = 0 -- 변수 초기화
sum = 0

while a ~= 10 do -- a가 10이 되기 전까지 실행
  sum = a + sum
  a = a + 1
end                   -- while 끝
print(sum) b = 0

 

sum = 0

repeat                -- repeat 시작
  sum = b + sum
  b = b + 1
until b == 10         -- b가 10이 되면 repeat 수행 종료
print(sum)

 

 


아래 예제는 while문 중간에 return문을 이용해서 함수값을 반환하면서 while문도 종료되는 모습을 보여주고 있다.


function sum(a1, a2)
  local s = 0
  while a1 ~= -1 do  --a1이 마이너스1이 아니면 반복실행
       s = a1 + s
       a1 = a1 + 1
      
       if a1 == a2 then  -- a1값이 1씩 증가해서  10이 되면 s값을 리턴하고 반복을 끝낸다.
           return s
       end
  end
end
print(sum(1, 10))
print(sum(1, 100))


결과

45
4950 

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

 

for반복문

 


for 변수=초기화값,비교값[,증가값] do
     -- 명령어들
end

 

 

이거 게시판 리스트 돌릴때 맨날 쓰는 그거랑같네

증가값의 디폴트는 1 . 안쓰면 1씩 증가라는거.

 

for i=1,4 do -- 기본 증가치는 1이 된다
  print(i)
end

 

for i=1,4,2 do
  print(i)
end

 

print(i) -- i값은 for문에서만 유효하다

그래서 얘는 nil 이 되는거..

요건 특이하네

 

 

 

 

제너릭 For문

 

for문 실행 처음에 단 한번만 초기화값에 의해 변수에 값이 저장되고 해당 변수로 비교값과 비교하여 참이면 for문에 있는 명령어를 실행하고, 다시 for 시작줄로 와서 변수를 증감연산에 의해서 값이 증가 혹은 감소 연산을 수행하고 그 결과 변수 값을 다시 비교 조건에 의해서 비교되어 참이면 명령어를 반복 수행하게 된다.

 

for 변수1[, 변수2] in 반복함수 do
  -- 명령어들
end

 

위의 반복함수는 for문이 실행식 한번씩 실행되며 그 결과 값은 차례로 변수1, 변수2에 저장된다.
반복함수 종류로는 5가지 종류가 있으며 사용자가 정의할 수도 있다.

pairs(table)
ipairs(table)
next()
io.lines()
file:lines()
Custom iterators

 


pairs(table)

이는 키-값의 쌍으로 이뤄진 반복함수로서 아래 for문에서 보듯이 앞에 변수에 키가 오며 다음 변수에는 키에 해당하는 값이 저장된다.

for key[, value] in pairs(테이블) do
  -- 명령어들
end


v = { "a", "b", "c", pi = 3.14}

-- paris(table)
for key,value in pairs(v) do
  print(key, value)
end


결과
1 a
2 b
3 c
pi 3.14


결과에 보듯이 숫자와 문자로된 모든 키가 나열되고 있고 해당 값이 표시되었다. iparis은 pairs와 다른 것은 키가 아닌 인덱스를 사용하는게 틀리다.

 


iparis(table)


이는 인덱스-값 쌍으로 이뤄진 반복함수로 아래 for문 처럼 index라는 변수에 인덱스가 저장되며 value변수에 해당 인덱스의 값이 저장된다.

for index[, value] in ipairs(테이블) do
  -- 명령어들
end


v = { "a", "b", "c", pi = 3.14}

--ipairs(talbe)
for index,value in ipairs(v) do
  print(index, value)
end


결과
1 a
2 b
3 c

결과를 보변 키 중에서 숫자로된 즉 인덱스만 나열되어 출력된다. 숫자가 아닌 키는 모두 생략된다.

추가로....

 

두개 차이는 인덱스키값 둘다 가지고 가느냐 인덱스값만 가져가느냐 차이..

 

 

 


next(table[, index])

next은 도우미 함수(helper function)으로 pairs에서 사용되는 함수이다. 간단히 설명하면 입력된 테이블(table)에서 현재 인덱스(지정안되면 1로 간주)에서 다음에 오는 키와 값 쌍을 반환한다.

아래와 같이 for문을 호출 하면 반복함수를 next로 사용하고 입력되는 테이블은 테이블변수가 되며 시작 위치로 nil(기본 값으로 1에서 시작)로 하고 종료는 next가 nil을 반환하면 끝낸다.

 

for key[, value] in next, 테이블변수, nil do
  -- 명령어들
end


v = { "a", "b", "c", pi = 3.14} -- next
for key,value in next, v, nil do
  print(key, value)
end


결과
1 a
2 b
3 c
pi 3.14

 

이거 까지는 그래 ok

 

 

 

 

아래꺼는 좀 더 찾아보자

 

io.lines()


io.output(io.open("my.txt","w"))
io.write("This is\nsome sample text\nfor Lua.")
io.close()


for line in io.lines("my.txt") do print(line) end

 

 

 

files:lines()


file = assert(io.open("my.txt", "r"))
for line in file:lines() do print(line) end
file:close()


Note: Explicitely, you have to open and close the file.


Custom iterator 

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

 

 

 

0
추천
0
비추천

등록된 댓글이 없습니다.