2013-03-01 35 views
9

我想嘗試在Lua中加載一個包。 包是ansicolors,只是有一個更好看的控制檯輸出。如何優雅地嘗試在Lua中加載軟件包?

這是糖,我不希望用戶被迫安裝這個軟件包。

所以我tryed是這樣的:

ansicolors = require 'ansicolors' or nil 

但因爲我認爲,它提高一個模塊沒有發現錯誤並停止執行。

所以我的問題是:是否有一個優雅的解決方案,試圖加載包和回退簡單的解決方案時,它是不可能的?

+1

對不起,我的答案的第一個版本不正確 - pcall返回模塊作爲其第二個值。請看我更新的答案。 – 2013-03-01 13:20:19

+0

沒關係,我查看了文檔。即使他們在例證中出現了一點小錯誤,我也一直在尋找。謝謝 – 2013-03-01 13:43:28

回答

18
local status, module = pcall(require, 'ansicolors') 
ansicolors = status and module or nil 
+0

爲什麼有第二行?只需使用:'local has_colors,ansicolors = pcall(require,「ansicolors」)' – daurnimator 2013-03-03 04:39:30

+0

@daurnimator - 因爲OP想要在一個變量中獲得「module_value或nil」。爲相同的功能使用兩個變量有點冗餘。 – 2013-03-03 06:24:38