Проблема с функцией, а точнее с аргументами
-- Анонимная функция
local add = function(a, b)
return a + b
end
-- Передача функции в качестве аргумента
local function apply(func, x)
return func(x)
end
print(apply(add, 3))
Можете помочь исправить?
lua: main.lua:3: attempt to perform arithmetic on a nil value (local 'b')
stack traceback:
main.lua:3: in function <main.lua:2>
(...tail calls...)
main.lua:11: in main chunk
[C]: in ?
Ответы (1 шт):
Автор решения: Alexander Mashin
→ Ссылка
Функция add (a, b) требует двух аргументов. Внутри функции apply (func, x) передаётся только один.
Не вполне ясно, чего именно Вы хотели достичь. Вот два работающих варианта. В первом используется вариативная функция:
-- Передача функции в качестве аргумента
local function apply (func, ...) -- вариативная функция.
return func (...) -- передача всех аргументов далее.
end
print (apply (function (a, b) -- это действительно анонимная функция.
return a + b
end, 3, 4 --[[а это два требуемых ею аргумента]] ))
Во втором примере используется замыкание:
local function add_this_much (add_this)
return function (add_to) -- замыкание, получающее один аргумент.
return add_to + add_this
end
end
local add_three = add_this_much (3) -- получается функция, получающая один аргумент.
print (add_three (4))