깊이 기사의 첫 번째 함수
- 함수 인 값의 첫 번째 유형 특정 갖는 어휘 도메인
첫 번째 값
- 제 평균값은 동일한 능력을 갖는 숫자 문자열로 LUA 다른 타입의 함수 인
- 함수는 테이블에 저장 될 수있는 글로벌 변수 혹은 국소 변수 변수에 저장 될 수있다
- 다른 함수에 인수로 전달 될 수 있습니다, 그것은 또한 다른의 반환 값로서 기능 할 수
어휘 도메인
정의 : 함수는 다른 함수에 중첩 될 수 있고, 기능이 외부에 의해 정의 된 함수 내에서 로컬 변수를 액세스 할
다른 모든 값 기능은 동일없는 익명의 어떤 이름
논의
print()
함수 값은 논의에만 상당print()
의 가변
a = {p = print}
a.p("Hello World") -- Hello World
c = print
c("eee") -- eee
print = math.sin
a.p(print(math.pi / 2)) -- 1
sin = a.p
sin(10, 20) -- 10 20
function foo(x)
return 2 * x
end
-- 等价于
foo = function (x) return 2 * x end
익명 기능
- 함수 정의는,이 기능을 발현 구조 유형의 함수로 볼 수있다 입문 할 수있다, 건축 결과 이러한 유형의 호출 된 함수 익명 함수
- 일반 기능은 전역 변수로 주어집니다
function foo(x)
return 2 * x
end
-- 等价于
foo = function(x) return 2 * x end
고차 함수
- 마찬가지로
table.sort()
또 다른 함수 호출 인자를 수신하는 기능과 같은 기능 고차 함수
-- table.sort 对 table 中的所有元素进行排序
network = {
{name = "atest", IP = "255.255.255.0",}
{name = "btest2"}, IP = "255.255.255.1"},
{name = "ctest3"}, IP = "255.255.255.3"},
{name = "dtest4"}, IP = "255.255.255.4"},
}
table.sort(network,
function (a, b)
return (a.name > b. name)
end
)
-- 导数 (f(x + d) - f(x)) / d 函数在某一个点处的导数
function derivative (f, delta)
delta = delta or 1e-4
return function (x)
return (f(x + delta) - f(x)) / delta
end
end
-- sin 的导数是 cos
c = derivative(math.sin)
print(math.sin(1), c(1))
print(math.sin(1), math.cos(0))
닫기 기능
names = {"Pe", "Tu", "Me"}
grades = {Pe = 10, Tu = 5, Me = 8}
table.sort(names, function (x, y)
return grades[x] > grades[y]
end
)
-- 按照年级进行排序
print(names[1], names[2], names[3])
function sortByGrade(names, grades)
table.sort(names, function (x, y)
return grades[x] > grades[y]
end
)
end
sortByGrade(names, grades)
- 익명 가변 파라미터 함수 및 비 로컬 변수라는 외부 함수를 호출한다.
- A는
closure
함수 플러스 기능에 액세스하는데 필요한 모든 "비 로컬 변수"인 - 다시 호출하면
newCounter
, 그는 새로운 지역 변수를 만듭니다i
따라서 새를 얻을 것이다closure
function newCounter()
local i = 0
return function ()
i = i + 1
return i
end
end
c1 = newCounter()
print(c1()) -- 1
print(c1()) -- 2
-- 重新定义 sin 函数,弧度转为角度
oldSin = math.sin
math.sin = function (x)
return oldSin(x * math.pi / 180)
end
do
local oldSin = math.sin
local k = math.pi / 180
math.sin = function (x)
return oldSin(x * k)
end
end
-- 限制一个程序访问文件
do
local oldOpen = io.open
local access_OK = function (filename, mode)
-- <检查访问权限的代码>
end
io.open = function (filename, mode)
if access_OK(filename, mode) then
print("允许访问")
return oldOpen(filename, mode)
else
print("不允许访问")
return nil, "access denied"
end
end
end