dreamnb 发表于 2012-5-9 11:33:46

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

pizzagoo 发表于 2012-5-9 13:46:03

可以用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

dreamnb 发表于 2012-5-9 14:38:31

function duhe()

print("yell boat")

end

sp=duhe

sp()
上面这样可以,但是加self:sp()就不行了。而我不self:sp()又不正常。因为是alias.new出来的,必须通过self来具体到实例对象

dreamnb 发表于 2012-5-9 15:13:33

我写个完成的测试例子吧。要不很难表达清楚---测试
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]
查看完整版本: lua函数请教,能否根据传入的参入调用对应函数。