diff options
| author | ruki <[email protected]> | 2016-09-01 09:09:31 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2016-09-01 09:09:31 +0800 |
| commit | 28c7f7cbaac7120070d429514d65c0be5f49541e (patch) | |
| tree | 24668315db58c808bd934fb0220da8af8730b038 | |
| parent | 097988a6e4485ce42d11e8c120aebb3b2fa8f4b0 (diff) | |
improve ipairs and pairs for sandbox
| -rw-r--r-- | CHANGELOG.md | 16 | ||||
| -rw-r--r-- | xmake/core/sandbox/modules/ipairs.lua | 37 | ||||
| -rw-r--r-- | xmake/core/sandbox/modules/pairs.lua | 37 |
3 files changed, 84 insertions, 6 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 730886481..fa3d6a422 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,14 @@ ## master (unreleased) +### New features + +* Add some interpreter builtin-modules + +### Changes + +* Improve ipairs and pairs interfaces and support filter + ## v2.0.4 ### New features @@ -146,6 +154,14 @@ ## master (������) +### ������ + +* Ϊ����������������һЩ�ڽ�ģ��֧�� + +### �Ľ� + +* ��ǿipairs��pairs�ӿڣ�֧�ֹ�����ģʽ���ű����� + ## v2.0.4 ### ������ diff --git a/xmake/core/sandbox/modules/ipairs.lua b/xmake/core/sandbox/modules/ipairs.lua index 4faf4a54f..7538b8e4f 100644 --- a/xmake/core/sandbox/modules/ipairs.lua +++ b/xmake/core/sandbox/modules/ipairs.lua @@ -24,10 +24,41 @@ local table = require("base/table") -- ipairs -function sandbox_ipairs(...) +-- +-- .e.g +-- +-- @code +-- +-- for idx, val in ipairs({"a", "b", "c", "d", "e", "f"}) do +-- print("%d %s", idx, val) +-- end +-- +-- for idx, val in ipairs({"a", "b", "c", "d", "e", "f"}, function (v) return v:upper() end) do +-- print("%d %s", idx, val) +-- end +-- +-- for idx, val in ipairs({"a", "b", "c", "d", "e", "f"}, function (v, a, b) return v:upper() .. a .. b end, "a", "b") do +-- print("%d %s", idx, val) +-- end +-- +-- @endcode +function sandbox_ipairs(t, filter, ...) + + -- init iterator + local args = {...} + local iter = function (t, i) + i = i + 1 + local v = t[i] + if v then + if filter ~= nil then + v = filter(v, unpack(args)) + end + return i, v + end + end - -- wrap it for nil - return ipairs(table.wrap(...)) + -- return iterator and initialized state + return iter, table.wrap(t), 0 end -- load module diff --git a/xmake/core/sandbox/modules/pairs.lua b/xmake/core/sandbox/modules/pairs.lua index 38d3cea09..d8adb98ef 100644 --- a/xmake/core/sandbox/modules/pairs.lua +++ b/xmake/core/sandbox/modules/pairs.lua @@ -24,10 +24,41 @@ local table = require("base/table") -- pairs -function sandbox_pairs(...) +-- +-- .e.g +-- +-- @code +-- +-- local t = {a = "a", b = "b", c = "c", d = "d", e = "e", f = "f"} +-- +-- for key, val in pairs(t) do +-- print("%s: %s", key, val) +-- end +-- +-- for key, val in pairs(t, function (v) return v:upper() end) do +-- print("%s: %s", key, val) +-- end +-- +-- for key, val in pairs(t, function (v, a, b) return v:upper() .. a .. b end, "a", "b") do +-- print("%s: %s", key, val) +-- end +-- +-- @endcode +-- +function sandbox_pairs(t, filter, ...) + + -- init iterator + local args = {...} + local iter = function (t, i) + local k, v = next(t, i) + if v and filter ~= nil then + v = filter(v, unpack(args)) + end + return k, v + end - -- wrap it for nil - return pairs(table.wrap(...)) + -- return iterator and initialized state + return iter, table.wrap(t), nil end -- load module |
