Lua - Reflection - 获取对象上的函数/字段列表?

lua*_*oob 28 c++ reflection lua function object

我是Lua的新手,并且在程序的alpha版本中将Lua作为脚本语言处理.开发人员没有响应,我需要获取一些可以从Lua代码访问的C++对象提供的函数列表.

有没有简单的方法来查看这些对象公开的字段和功能?

Fra*_*man 38

在Lua中,要查看对象的成员,可以使用:

for key,value in pairs(o) do
    print("found member " .. key);
end
Run Code Online (Sandbox Code Playgroud)

不幸的是,我不知道这是否适用于从C++导入的对象.

  • 基于DLL的模块通常只导出单个函数`luaopen_modulename()`,它构造模块的表并将其返回给实现`require()`的机器.通常不会导出实现模块中实际函数的代码,因为它只能在运行的Lua解释器状态的上下文中调用. (2认同)

u0b*_*6ae 19

如果在环境中允许,查看导出的C++对象的元表可以帮助:

for key,value in pairs(getmetatable(o)) do
    print(key, value)
end
Run Code Online (Sandbox Code Playgroud)


Mr *_*nky 7

打印所有全局变量:

    -- globals.lua
    -- show all global variables

    local seen={}

    function dump(t,i)
        seen[t]=true
        local s={}
        local n=0
        for k in pairs(t) do
            n=n+1 s[n]=k
        end
        table.sort(s)
        for k,v in ipairs(s) do
            print(i,v)
            v=t[v]
            if type(v)=="table" and not seen[v] then
                dump(v,i.."\t")
            end
        end
    end

    dump(_G,"")

来源:http://www.lua.org/cgi-bin/demo

输出:


    _G
    _VERSION
    assert
    bit32
        arshift
        band
        bnot
        bor
        btest
        bxor
        extract
        lrotate
        lshift
        replace
        rrotate
        rshift
    collectgarbage
    coroutine
        create
        isyieldable
        resume
        running
        status
        wrap
        yield
    debug
        gethook
        getinfo
        getlocal
        getmetatable
        getupvalue
        getuservalue
        sethook
        setlocal
        setmetatable
        setupvalue
        setuservalue
        traceback
        upvalueid
        upvaluejoin
    dump
    error
    getmetatable
    io
        write
    ipairs
    load
    math
        abs
        acos
        asin
        atan
        atan2
        ceil
        cos
        cosh
        deg
        exp
        floor
        fmod
        frexp
        huge
        ldexp
        log
        log10
        max
        maxinteger
        min
        mininteger
        modf
        pi
        pow
        rad
        random
        randomseed
        sin
        sinh
        sqrt
        tan
        tanh
        tointeger
        type
        ult
    next
    os
        clock
        date
        difftime
        exit
        setlocale
        time
    pairs
    pcall
    print
    rawequal
    rawget
    rawlen
    rawset
    select
    setmetatable
    string
        byte
        char
        dump
        find
        format
        gmatch
        gsub
        len
        lower
        match
        pack
        packsize
        rep
        reverse
        sub
        unpack
        upper
    table
        concat
        insert
        move
        pack
        remove
        sort
        unpack
    tonumber
    tostring
    type
    utf8
        char
        charpattern
        codepoint
        codes
        len
        offset
    xpcall