Ví dụ thứ hai là tương đương với
add = function(a,b) return a+b end
Vì vậy, thực sự bạn đang sử dụng chức năng ẩn danh tất cả các thời gian, trong một cảm giác tầm thường.
Nhưng các chức năng ẩn danh có thể hữu ích hơn nhiều trong các ngữ cảnh khác. Ví dụ, sử dụng chức năng để biến đổi các chức năng khác (linh hồn của lập trình chức năng.)
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))
Về cơ bản, bạn có thể tạo một tên cho mỗi chức năng duy nhất nếu bạn muốn, nhưng trong tình huống mà bạn đang ném xung quanh rất nhiều chức năng một lần, nó là thuận tiện hơn để không làm như vậy.
Nguồn
2011-11-15 19:52:54
Bạn đã nhận nó ngược. Một mô hình tinh thần hữu ích hơn nhiều đang xử lý 'hàm f (...) ... end' như là cú pháp cho' local f = function (...) ... end', và nghĩ về các hàm nói chung là các đối tượng thay thế các khối xây dựng tĩnh của chương trình của bạn. Bạn không hỏi tại sao bạn có thể sử dụng chữ số mà không cho họ một tên tiếng Anh phức tạp trước tiên, phải không? – delnan