2013-11-04 52 views
5

與許多「(窗口)用戶」一樣,我不想花時間學習從源代碼編譯任何東西。 因此,對於一個業餘愛好者來說,Lua似乎是一個非常好的選擇。如何在命令行中列出模塊和檢查功能?

很抱歉,如果這是一個很簡單的問題 - 但是...

Q1。如何列出可用於解釋器的任何給定實例的模塊?

一些二進制發行版有一些編譯爲DLL的模塊,有些將它們添加到主EXE中。 很高興知道哪些模塊內置到EXE中,並檢查cpath是否找到任何其他DLL模塊。 Q2302。有沒有辦法在Lua的命令行獲得幫助?

因爲我是Lua的新手,我想要一個簡單的方法來獲得任何給定函數的幫助。 在一些解釋型語言中有一個幫助(「fname」)函數,Matlab就是一個很好的例子。

Q3。可以將GSL-Shell的這個功能修改爲幫助系統的基礎嗎? (即使它只是證實一個給定函數的存在,它會幫助)

 
local ffi = require 'ffi' 

local help_files = {'graphics', 'matrix', 'iter', 'integ', 'ode', 'nlfit', 'vegas', 'rng', 'fft'} 

local cdata_table = {'matrix', 'complex matrix', 'complex'} 

local function help_init(...) 
    local REG = debug.getregistry() 
    REG['GSL.help_hook'] = {} 
end 

local function open_module(modname) 
    local fullname = string.format('help/%s', modname) 
    local m = require(fullname) 
    return m 
end 

local function search_help(func) 
    for k, modname in ipairs(help_files) do 
     local mt = getmetatable(func) 
     local module = open_module(modname) 
     if module[func] then 
      local help_text = module[func] 
      return help_text 
     end 
    end 
end 

help_init() 

-- declare a global function 
function help(x) 
    local txt 
    if type(x) == 'function' then 
     txt = search_help(x) 
    elseif type(x) == 'userdata' then 
     local mt = getmetatable(x) 
     if mt then txt = search_help(mt) end 
    elseif type(x) == 'cdata' then 
     local cname = gsl_type(x) 
     if cname then txt = search_help(cname) end 
    end 
    --- Could we check that the function exists? 
    print(txt or "No help found for the given function") 
end 
+0

Q1:沒有內置或真正集中的方式來做到這一點。我的建議是檢查[LuaDist](http://luadist.org/)和[LuaRocks](http://luarocks.org/)Lua軟件包管理器:) 另外...也許你會發現[LFW](http://code.google.com/p/luaforwindows/)(適用於Windows的Lua)項目很有用... – Kamiccolo

回答

1

Q2:有沒有這樣的任何標準幫助功能。在文檔格式上進行了一些標準化的努力,但據我所知,它們都沒有得到太多的牽引力。

問題3:如果您有適當的幫助文件設置,該功能當然可以用作幫助系統的基礎。

這就是說,如果你只是想找出哪些功能是可用的給定的模塊,你通常可以轉儲模塊表並找出。請參閱lua演示中的globals example作爲示例。

相關問題