첫 번째 챕터의 기능 루아 심도있는 연구

깊이 기사의 첫 번째 함수

  1. 함수 인 값의 첫 번째 유형 특정 갖는 어휘 도메인

첫 번째 값

  1. 제 평균값은 동일한 능력을 갖는 숫자 문자열로 LUA 다른 타입의 함수 인
  2. 함수는 테이블에 저장 될 수있는 글로벌 변수 혹은 국소 변수 변수에 저장 될 수있다
  3. 다른 함수에 인수로 전달 될 수 있습니다, 그것은 또한 다른의 반환 값로서 기능 할 수

어휘 도메인

  1. 정의 : 함수는 다른 함수에 중첩 될 수 있고, 기능이 외부에 의해 정의 된 함수 내에서 로컬 변수를 액세스 할

  2. 다른 모든 값 기능은 동일없는 익명의 어떤 이름

  3. 논의 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

익명 기능

  1. 함수 정의는,이 기능을 발현 구조 유형의 함수로 볼 수있다 입문 할 수있다, 건축 결과 이러한 유형의 호출 된 함수 익명 함수
  2. 일반 기능은 전역 변수로 주어집니다
function foo(x)
    return 2 * x
end
-- 等价于
foo = function(x) return 2 * x end

고차 함수

  1. 마찬가지로 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)
  1. 익명 가변 파라미터 함수 및 비 로컬 변수라는 외부 함수를 호출한다.
  2. A는 closure함수 플러스 기능에 액세스하는데 필요한 모든 "비 로컬 변수"인
  3. 다시 호출하면 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

추천

출처www.cnblogs.com/door-leaf/p/12354235.html