function eval(str)
if type(str) == "string" then
return loadstring("return " .. str)()
elseif type(str) == "number" then
return loadstring("return " .. tostring(str))()
else
error("is not a string")
end
end
function lambda(lambda_string,argument)
--验证是否仅存在一个:号
pos = string.find(lambda_string,":")
if pos ~= nil then
if string.find(lambda_string,":",pos+1)~= nil then
error('more than one ":"')
end
end
if type(lambda_string) ~= "string" then
error("is not a string")
end
--lambda x:x+x 将其分割为 参数 x 和 表达式 x+x 的形式
parameter = string.sub(lambda_string,1,pos-1)
expression = string.sub(lambda_string,pos+1,-1)
--根据需要可以更详细的对参数进行验证,这里就不做了
fun = string.format("return function(%s) return %s end",parameter,expression)
print (fun)
func = loadstring(fun)()(loadstring("return " .. tostring(argument))())
end
--直接返回值的测试
t = loadstring("return 134")
print(t)
--上边的loadstring返回的是一个function,需要加()才可以调用
print(t())
t = loadstring("return 134")()
print(t)
--定义一个非匿名函数,直接调用
t = loadstring("function xxx(a) return a end return xxx('this is a function test')")()
print(t)
--定义匿名函数,然后调用
t = loadstring("return function(a) return a end")()
print(t("this is a test"))
--验证eval函数
print(eval("111,333"))
print(eval("111+333*2"))
print(eval("134+34*1224>1"))
--这里的表达式,lua首先自己进行计算,然后再传入eval函数
print(eval(134+34*1224))
--验证lambda函数
t = lambda("x,y:print(x+y)","7,8")
t = lambda("x:print(x*134)",14)