두 번째 예는 그래서 정말 사소한 의미에서, 익명 함수에게 모든 시간을 사용하고
add = function(a,b) return a+b end
에 해당합니다.
하지만 익명의 함수는 다른 컨텍스트에서 훨씬 더 유용 할 수 있습니다. 예를 들어, 함수를 사용하면 원하는 경우
function make_version_with_n_args (func, n)
if n == 1 then
return function (x) return x end
else
return function (x, ...)
return func (x, make_version_with_n_args (func, n-1)(...))
end
end
end
add_four = make_version_with_n_args (function (a, b) return a+b end, 4)
print (add_four(3, 3, 3, 3))
add_sizes = {}
for i = 1, 5 do
add_sizes[i] = make_version_with_n_args(function (a, b) return a+b end, i)
end
func_args = {}
for i = 1, 5 do
func_args[#func_args+1] = 2
print (add_sizes[i](unpack(func_args)))
end
function make_general_version (func)
return function (...)
local args = {...}
local result = args[#args]
for i = #args-1,1,-1 do
result = func(args[i], result)
end
return result
end
end
general_add = make_general_version (function (a, b) return a+b end)
print (general_add(4, 4, 4, 4))
기본적으로, 당신은 모든 단일 기능의 이름을 만들 수 있습니다. (함수형 프로그래밍의 영혼) 다른 기능을 돌연변이,하지만 상황에서 당신은 너무 많은 주위에 던지는 곳 일회용 기능이 없기 때문에 보다 편리합니다..
뒤로 가세요. 훨씬 더 유용한 정신 모델은'local f = function (...) ... end'에 대한 구문 적 설탕으로'function f (...) ... end'를 취급하고 함수를 일반적으로 객체로 생각합니다 귀하의 프로그램의 정적 빌딩 블록의. 왜 숫자 리터럴을 정교한 영어 이름을 사용하지 않고 사용할 수 있는지 묻지 않습니다. 그렇습니까? – delnan