【发布时间】:2010-10-30 18:22:57
【问题描述】:
我目前正在嵌入 Lua 并将其用作美化的智能配置文件。但是,我认为我错过了一些东西,因为人们对 Lua 的使用赞不绝口。
例如,我可以通过显示此示例轻松解释为什么您可能使用 shell 脚本而不是 C(诚然,boost regexp 是多余的):
#include <dirent.h>
#include <stdio.h>
#include <boost/regex.hpp>
int main(int argc, char * argv[]) {
DIR *d;
struct dirent *dir;
boost::regex re(".*\\.cpp$");
if (argc==2) d = opendir(argv[1]); else d = opendir(".");
if (d) {
while ((dir = readdir(d)) != NULL) {
if (boost::regex_match(dir->d_name, re)) printf("%s\n", dir->d_name);
}
closedir(d);
}
return(0);
并将其与以下内容进行比较:
for foo in *.cpp; do echo $foo; done;
您可以在 Lua 中提供任何可以让我“点击”的示例吗?
编辑:也许我的问题是我对 Lua 的了解还不够好,还不能流利地使用它,因为我发现编写 C 代码更容易。
EDIT2:
一个例子是 C++ 和 Lua 中的一个玩具阶乘程序:
#include <iostream>
int fact (int n){
if (n==0) return 1; else
return (n*fact(n-1));
}
int main (){
int input;
using namespace std;
cout << "Enter a number: " ;
cin >> input;
cout << "factorial: " << fact(input) << endl;
return 0;
}
卢阿:
function fact (n)
if n==0 then
return 1
else
return n * (fact(n-1))
end
end
print ("enter a number")
a = io.read("*number")
print ("Factorial: ",fact(a))
在这里,这些程序看起来很相似,但在包含、命名空间和 main() 声明中显然有些杂乱无章,您可以去掉。同时删除变量声明和强类型。
现在人们是说这是一个更大的程序的优势,还是有更多的优势?这与 bash 示例不同。
【问题讨论】:
-
学习其他编程语言会让你成为更好的程序员。即使在 C 语言中,您也会学会以不同的方式思考。
-
近似副本从不同的方向接近同一种问题。将它们交叉链接很好,但我自己并不认为这是“完全”复制。
-
Lua 相对于 C++ 的唯一“真正”优势是您不必编译它,并且有很多预制的 Lua 解释器可以真正集成容易地。当然,您可以使用 C++,但是您要么必须解释它,要么将文件动态链接到您的代码以使用它,这只是一种痛苦。使用 Lua,您可以设置几个方便的全局变量(或者您决定让它工作),运行一个您不必编写的解释器,然后 bam,它就可以工作了。