瀏覽代碼

util.xpcall for lua5.1;

bjorn 9 年之前
父節點
當前提交
3f3f18dd72
共有 2 個文件被更改,包括 14 次插入2 次删除
  1. 7 1
      rx.lua
  2. 7 1
      src/util.lua

+ 7 - 1
rx.lua

@@ -6,6 +6,12 @@ local util = {}
 
 util.pack = table.pack or function(...) return { n = select('#', ...), ... } end
 util.unpack = table.unpack or unpack
+util.xpcall = function(fn, err, ...)
+  local arg = util.pack(...)
+  return xpcall(function()
+    fn(util.unpack(arg))
+  end, err)
+end
 util.eq = function(x, y) return x == y end
 util.noop = function() end
 util.identity = function(x) return x end
@@ -14,7 +20,7 @@ util.isa = function(object, class)
   return type(object) == 'table' and getmetatable(object).__index == class
 end
 util.tryWithObserver = function(observer, fn, ...)
-  return xpcall(fn, function(...)
+  return util.xpcall(fn, function(...)
     return observer:onError(...)
   end, ...)
 end

+ 7 - 1
src/util.lua

@@ -2,6 +2,12 @@ local util = {}
 
 util.pack = table.pack or function(...) return { n = select('#', ...), ... } end
 util.unpack = table.unpack or unpack
+util.xpcall = function(fn, err, ...)
+  local arg = util.pack(...)
+  return xpcall(function()
+    fn(util.unpack(arg))
+  end, err)
+end
 util.eq = function(x, y) return x == y end
 util.noop = function() end
 util.identity = function(x) return x end
@@ -10,7 +16,7 @@ util.isa = function(object, class)
   return type(object) == 'table' and getmetatable(object).__index == class
 end
 util.tryWithObserver = function(observer, fn, ...)
-  return xpcall(fn, function(...)
+  return util.xpcall(fn, function(...)
     return observer:onError(...)
   end, ...)
 end