lua函数请教,能否根据传入的参入调用对应函数。
我再使用技术教程中的mush实现gps的代码其中需要alias.lua实现过特殊路段,我是用下面代码实现的function alias:exec(sp)
if sp=="duhe" then
self:duhe()
--return
end
if sp=="em_gdl" then
self:em_gdl()
--return
end
if sp=="sk_to_xx" then
self:sk_to_xx()
end
if sp=="xx_to_sk" then
self:xx_to_sk()
end
if sp=="tssl_to_sk" then
self:tssl_to_sk()
end
if sp=="sk_to_tssl" then
self:sk_to_tssl()
end
end但是感觉这样很笨,有没有办法根据传入进来的sp内容,直接调用相应的self:sp代表的函数?
比如我sp传入的是sk_to_tssl,就直接调用self:sk_to_tssl()呢?
感觉lua的语法怪怪的,还没有switch。。。全部都是elseif嵌套,大家都这样实现switch吗?
北大侠客行MUD,中国最好的MUD 可以用table来做,sample:
TransferPathTable = {
["断魂崖"] = function() x = "(zou tiesuo)"; y = "(sd)" return x,y,true end,
["缥缈峰山脚"] = function() x = "(zou tiesuo)"; y = "(sd) (sd)" return x,y,true end,
["松林"] = function() x = "(nw) (ne) (nu)"; y = nil return x,y,false end,
["仙愁门"] = function() x = nil; y = nil return x,y,false end,
["百丈涧"] = function() x = "(zou tiesuo)"; y = nil return x,y,true end,
["青石大道"] = function() x = "(nw) (ne) (nu) (nu)"; y = nil return x,y,false end,
["山路"] = function() x = "(nw)"; y = nil return x,y,false end,
["小路"] = function() x = "(zou tiesuo)"; y = "(sd) (sd) s" return x,y,false end
}
function WalkToAddress(address)
cmdWalk = "";
temp = false;
cmdWalk,ContinueAfterTiesuo,temp = TransferPathTable();
if (cmdWalk ~= nil) then
DoAfterSpeedWalk(1,cmdWalk);
end
if (not temp) then
DoAfter(2,"hp");
end
end function duhe()
print("yell boat")
end
sp=duhe
sp()
上面这样可以,但是加self:sp()就不行了。而我不self:sp()又不正常。因为是alias.new出来的,必须通过self来具体到实例对象 我写个完成的测试例子吧。要不很难表达清楚---测试
testclass={
new=function()
local a={}
setmetatable(a, {__index = testclass})
return a
end,
}
function testclass:exec(sp)
sp()
end
function testclass:mytest()
print("我的测试类")
end
---测试结束
function do_test()
local t
t=testclass.new()
print(t)
t:exec("my_test")
end
通过do_test函数测试,在函数里创建testclass类的对象t,并调用t.exec("my_test")函数
通过传递的my_test字符串,我希望在上面面的exec函数里,可以直接调用和参数对应的函数。也就是
self:sp()
但是这样写会报错如下
Run-time error
World: rbt_test
Function/Sub: do_test called by alias
Reason: processing alias ""
:28: attempt to call local 'sp' (a string value)
stack traceback:
:28: in function 'exec'
:43: in function <:39>
Error context in script:
24 : end,
25 : }
26 :
27 : function testclass:exec(sp)
28*:sp()
29 :
30 :
31 :
32 : end
提示没有sp这个方法。也就是传递过来的my_test只是字符串,而sp里报错的也是my_test字符串,不能通过sp()来调用到对应的函数。。。。
说的比较晕,大家明白我的意思吗?
页:
[1]