В настоящее время я внедряю Lua и использую его в качестве прославленного интеллектуального конфигурационного файла. Тем не менее, я думаю, что у меня что-то не хватает, потому что люди бредит об использовании Lua.
Например, я могу легко объяснить, почему вы можете использовать сценарий оболочки вместо 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, которые могут сделать это 'click' для меня?
EDIT: Может быть, моя проблема в том, что я не знаю Lua достаточно хорошо, чтобы использовать ее свободно, поскольку мне легче писать код C.
EDIT2:
Одним из примеров является игрушечная факториальная программа в С++ и 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;
}
Lua:
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))
Здесь программы выглядят одинаково, но очевидно, что некоторые из них относятся к объявлениям include, namespace и main(), от которых вы можете избавиться. Также удалите объявления переменных и сильную типизацию.
Теперь люди говорят, что это преимущество, которое складывается по более крупной программе, или есть еще больше? Это не выделяется так же, как пример bash.