알맹이방
Lua_Study(5장) 본문
function nonils(...)
local arg = table,pack(...)
for i =1, arg.n do
if arg[i] == nill then return false end
end
return true
end
print(nonils(2,3,nil)) -->false
print(nonils()) -->true
1. function
남는 인자는 버려지고 인자가 모자란 경우 해당 매개변수는 nil이 된다.
f(2) -- 3 nill
f(2, 3) -- 2, 3
f(2, 3, 4) -- 2, 3 (4는 버려짐)
루아의 함수는 여러 값을 반환할 수 있다.
s, e = string.find("hello lua users", "lua")
print(s, e) -- 7, 9
테이블 생성자는 반환하는 값의 개수 조정 없이 모두 받아 간다.
t = { foo0() } --t={}
t = { foo1() } --t={"a"}
t = { foo2() } --t={"a", "b"}
다만 여러가지의 인자들이 한 표현식 안에 있을 때는 함수에서 반환하는 값의 개수를 하나로 줄여버린다.
print(foo2()..x) --ax (b사라짐)
-- 이는 테이블에서도 마찬가지다.
t= {foo0(), foo2(), 4} --t[1]=nil, t[2]="a", t[3]=4 (b사라짐)
--그래서 맨 앞에 딱 한 값만 받으려면 한번 더 감싸면 된다.
print((foo0()))
print((foo2()))
table.unpack()은 다중 반환을 해주는 특수 함수다. 인자로 받은 배열의 원소를 인덱스 1의 원소부터 모두 다중 반환한다.
print(table.unpack{10, 20, 30}) --> 10 20 30
a, b = table.unpack{10, 20, 30} --> a=10, b=20, 30은 버려짐
f = string.find
a = {"hello", "ll"}
print(f(table.unpack(a)) == print(string.find("hello", "ll"))
-- unpack의 길이를 지정해 줄 수 있다.
print(table.unpack({"sun", "mon", "tue", "wed"}, 2, 3)) --> mon, tue
가변 인자 함수
함수를 호출할 대마다 서로 다른 개수의 인자를 넣을 수 있다.
function add(...)
local s =0
for i, v, in ipairs{...} do --{...}에 인자 배열
s=s+v
end
return s
end
function foo(...)
local a, b, c = ...
end
function foo(...)
return ...
end
+ 드물기는 하지만 nil도 추가 인자로 들어갈 수 있다. 이런 경우 {...}로 만들어지는 테이블은 순수 순열이 아닐 수 있다. 원래부터 마지막 인자로 nil을 붙인 건지 아닌지를 구별할 방법이 없다. 이런 문제는 table.pack 함수를 써서 해결한다.
이 함수는 임의의 개수의 인자를 받아서, 이 인자들을 모두 담고 있는 테이블을 생성해서 반환한다. {...}과는 달리 전체 인자의 개수를 담고 있는 필드 "n"을 추가로 담고 있다는 차이가 있다.
예시 코드
function nonils(...)
local arg = table.pack(...)
for i = 1, arg.n do
if arg[i] == nil tehn return false end
end
return true
end
print(nonils(2, 3, nil)) --> false
print(nonils()) --> true
이름을 붙인 인자
rename(old="temp.lua", new="temp1.lua") --문법에 맞지 않음
rename({old="temp.lua", new="temp1.lua"})
rename{old="temp.lua", new="temp1.lua"}
function rename(arg)
return os.rename(arg.old, arg.new)
end
'Study > Lua' 카테고리의 다른 글
Lua_Study(dofile vs loadfile vs load) (0) | 2022.07.12 |
---|---|
Lua_Study(pairs와 ipairs의 차이점) (0) | 2022.07.12 |
Lua_Study(6장) (0) | 2022.07.11 |
Lua_Study(4장) (0) | 2022.07.11 |
LUA_study(1~3장) (0) | 2022.07.11 |
Comments