1
0
mirror of https://github.com/SpaceVim/SpaceVim.git synced 2025-02-03 07:50:05 +08:00
SpaceVim/bundle/plenary.nvim/lua/plenary/functional.lua

72 lines
1.1 KiB
Lua
Raw Normal View History

2022-05-16 22:20:10 +08:00
local f = {}
function f.kv_pairs(t)
local results = {}
for k, v in pairs(t) do
table.insert(results, { k, v })
end
return results
end
function f.kv_map(fun, t)
return vim.tbl_map(fun, f.kv_pairs(t))
end
function f.join(array, sep)
return table.concat(vim.tbl_map(tostring, array), sep)
end
function f.partial(fun, ...)
local args = { ... }
return function(...)
return fun(unpack(args), ...)
end
end
function f.any(fun, iterable)
for k, v in pairs(iterable) do
if fun(k, v) then
return true
end
end
return false
end
function f.all(fun, iterable)
for k, v in pairs(iterable) do
if not fun(k, v) then
return false
end
end
return true
end
function f.if_nil(val, was_nil, was_not_nil)
if val == nil then
return was_nil
else
return was_not_nil
end
end
function f.select_only(n)
return function(...)
local x = select(n, ...)
return x
end
end
f.first = f.select_only(1)
f.second = f.select_only(2)
f.third = f.select_only(3)
function f.last(...)
local length = select("#", ...)
local x = select(length, ...)
return x
end
return f