ToLua学习笔记(八) Example 08 AccessingArray

22 篇文章 0 订阅
11 篇文章 1 订阅

ToLua学习笔记(八) Example 08 AccessingArray

转载请注明出处四川包邮

这个例子主要是在之前的数组例子上扩展了一些调用方式

代码,已经在Lua中添加了部分注释,因为Lua语法和c#语法还是有很大不同

using UnityEngine;
using LuaInterface;

public class AccessingArray : MonoBehaviour 
{
    private string script =
        @"
            function TestArray(array)
                local len = array.Length

                --lua语法for i=start,end,step do ... end
                for i = 0, len - 1 do
                    print('Array: '..tostring(array[i]))
                end

                local t = array:ToTable()                

                --初识Lua肯定很多人不明白#t吧
                --#t==table.getn(t),取顺序索引表的 大小
                for i = 1, #t do
                    print('table: '.. tostring(t[i]))
                end

                local iter = array:GetEnumerator()

                --迭代器
                while iter:MoveNext() do
                    print('iter: '..iter.Current)
                end

                local pos = array:BinarySearch(3)
                print('array BinarySearch: pos: '..pos..' value: '..array[pos])

                pos = array:IndexOf(4)
                print('array indexof bbb pos is: '..pos)

                return 1, '123', true
            end            
        ";

    LuaState lua = null;
    LuaFunction func = null;

    void Start()
    {
        lua = new LuaState();
        lua.Start();
        lua.DoString(script, "AccessingArray.cs");

        int[] array = { 1, 2, 3, 4, 5};        
        func = lua.GetFunction("TestArray");

        func.BeginPCall();
        func.Push(array);
        func.PCall();
        double arg1 = func.CheckNumber();
        string arg2 = func.CheckString();
        bool arg3 = func.CheckBoolean();
        Debugger.Log("return is {0} {1} {2}", arg1, arg2, arg3);
        func.EndPCall();

        //转换一下类型,避免可变参数拆成多个参数传递
        object[] objs = func.Call((object)array);

        if (objs != null)
        {
            Debugger.Log("return is {0} {1} {2}", objs[0], objs[1], objs[2]);
        }

        lua.CheckTop();                
    }

    void OnApplicationQuit()
    {
        func.Dispose();
        lua.Dispose();
    }
}

注意事项

转换一下类型,避免可变参数拆成多个参数传递

    object[] objs = func.Call((object)array);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值