summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2016-09-01 09:09:31 +0800
committerruki <[email protected]>2016-09-01 09:09:31 +0800
commit28c7f7cbaac7120070d429514d65c0be5f49541e (patch)
tree24668315db58c808bd934fb0220da8af8730b038
parent097988a6e4485ce42d11e8c120aebb3b2fa8f4b0 (diff)
improve ipairs and pairs for sandbox
-rw-r--r--CHANGELOG.md16
-rw-r--r--xmake/core/sandbox/modules/ipairs.lua37
-rw-r--r--xmake/core/sandbox/modules/pairs.lua37
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