El segundo ejemplo es equivalente al
add = function(a,b) return a+b end
Así que en realidad está utilizando funciones anónimas todo el tiempo, en un sentido trivial.
Pero las funciones anónimas pueden ser mucho más útiles en otros contextos. Por ejemplo, el uso de funciones para mutar otras funciones (el alma de la programación funcional.)
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))
Básicamente, se puede crear un nombre para cada función si se quiere, pero en situaciones en las que están tirando en torno a tantos funciones únicas, es más conveniente no hacerlo.
Lo tienes al revés. Un modelo mental mucho más útil es tratar 'function f (...) ... end' como azúcar sintáctico para' local f = function (...) ... end', y pensar en funciones en general como objetos en su lugar de bloques de construcción estáticos de su programa. Usted no pregunta por qué puede usar los literales numéricos sin darles un elaborado nombre en inglés, ¿verdad? – delnan