函数作为参数

Lambda 表达式

-- The function is an argument: it is called
-- inside for every item
local function map(list, transform)
  local result = {}
  for _, item in ipairs(list) do
    result[#result + 1] = transform(item)
  end
  return result
end

local function filter(list, test)
  local result = {}
  for _, item in ipairs(list) do
    if test(item) then
      result[#result + 1] = item
    end
  end
  return result
end

local numbers = {2, 3, 1, 7, 9}

-- A lambda is written right in the call
local numbers1 = map(numbers, function(x)
  return x * 2 + 1
end)
-- numbers1 = 5, 7, 3, 15, 19

local numbers2 = filter(numbers, function(x)
  return x % 3 == 0
end)
-- numbers2 = 3, 9

print("numbers1 = "
      .. table.concat(numbers1, ", "))
print("numbers2 = "
      .. table.concat(numbers2, ", "))