From be40cd627601e2dea3d7d6b45f1f0b970756b768 Mon Sep 17 00:00:00 2001 From: rxi Date: Sat, 15 Mar 2014 21:20:53 +0000 Subject: [PATCH] Added caching to lume.lambda() --- lume.lua | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lume.lua b/lume.lua index 26d8b0f..8b22e39 100644 --- a/lume.lua +++ b/lume.lua @@ -228,11 +228,16 @@ function lume.time(fn, ...) end +local lambda_cache = {} + function lume.lambda(str) - local args, body = str:match([[^([%w,_ ]-)%->(.-)$]]) - assert(args and body, "bad string lambda") - local s = "return function(" .. args .. ")\nreturn " .. body .. "\nend" - return lume.dostring(s) + if not lambda_cache[str] then + local args, body = str:match([[^([%w,_ ]-)%->(.-)$]]) + assert(args and body, "bad string lambda") + local s = "return function(" .. args .. ")\nreturn " .. body .. "\nend" + lambda_cache[str] = lume.dostring(s) + end + return lambda_cache[str] end