2013-03-01 65 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