http://manual.luaer.cn/

http://www.lua.org/pil/contents.html

  1. #include <cstdio>
  2. #include <string>
  3. extern "C"{
  4. #include "lua.h"
  5. #include "lauxlib.h"
  6. #include "lualib.h"
  7. };
  8.  
  9. static int foo(lua_State* L)
  10. {
  11. int n = lua_gettop(L);
  12. lua_Number sum = ;
  13. int i = ;
  14. for (i=; i <= n; ++i)
  15. {
  16. if (!lua_isnumber(L, i))
  17. {
  18. lua_pushstring(L, "incorrect argument");
  19. lua_error(L);
  20. }
  21. sum += lua_tonumber(L, i);
  22. }
  23. lua_pushnumber(L, sum/n);
  24. lua_pushnumber(L, sum);
  25. return ;
  26. }
  27.  
  28. int main(void)
  29. {
  30. char buff[] = {};
  31. int error = ;
  32.  
  33. lua_State *L = luaL_newstate();
  34. luaL_openlibs(L);
  35.  
  36. lua_createtable(L, , );
  37. lua_setfield(L, LUA_GLOBALSINDEX, "t_test");
  38. lua_getfield(L, LUA_GLOBALSINDEX, "t_test");
  39. lua_pushstring(L, "test");
  40. lua_setfield(L, -, "test");
  41.  
  42. lua_pushcfunction(L, foo);
  43. lua_setfield(L, -, "foo");
  44.  
  45. lua_settop(L, );
  46.  
  47. while (fgets(buff, sizeof(buff), stdin) != NULL)
  48. {
  49. size_t sz = strlen(buff);
  50. error = luaL_loadbuffer(L, buff, sz, "line")
  51. || lua_pcall(L, , , );
  52. if (error)
  53. {
  54. fprintf(stderr, "%s", lua_tostring(L, -));
  55. lua_pop(L, );
  56. }
  57. }
  58.  
  59. /*int err = luaL_loadfile(L, "hangj.lua") || lua_pcall(L, 0, LUA_MULTRET, 0);
  60. if (err)
  61. {
  62. fprintf(stderr, "%s", lua_tostring(L, -1));
  63. lua_pop(L, 1);
  64. }*/
  65.  
  66. lua_getfield(L, LUA_GLOBALSINDEX, "hangj");
  67. const char* str = lua_tostring(L, -);
  68. if (str)
  69. printf("hangj: %s\n", str);
  70. lua_remove(L, -);
  71.  
  72. lua_close(L);
  73. getchar();
  74. return ;
  75. }
  1. int lua_gettop (lua_State *L);

返回栈顶元素的 index,因为 index 是从 1 开始的,所以返回值等于栈中元素的个数。0 表示空栈。

hello lua的更多相关文章

  1. lua执行字节码的过程介绍

    前面一篇文章中介绍了lua给下面代码生成最终的字节码的整个过程,这次我们来看看lua vm执行这些字节码的过程. foo = "bar" local a, b = "a& ...

  2. lua 学习笔记(1)

    一.lua函数赋值与函数调用         在lua中函数名也是作为一种变量出现的,即函数和所有其他值一样都是匿名的,当要使用某个函数时,需要将该函数赋值给一个变量,这样在函数块的其他地方就可以通过 ...

  3. 在redis中使用lua脚本让你的灵活性提高5个逼格

    在redis的官网上洋洋洒洒的大概提供了200多个命令,貌似看起来很多,但是这些都是别人预先给你定义好的,但你却不能按照自己的意图进行定制, 所以是不是感觉自己还是有一种被束缚的感觉,有这个感觉就对了 ...

  4. 使用Nginx+Lua代理Hadoop HA

    一.Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个Master组件提供服务,其中正在使用的组件称为Active,另一个作为备份称为Standby,例如HDFS的NameNo ...

  5. 打印Lua的Table对象

    小伙伴们再也不用为打印lua的Table对象而苦恼了, 本人曾也苦恼过,哈哈 不过今天刚完成了这个东西, 以前在网上搜过打印table的脚本,但是都感觉很不理想,于是,自己造轮子了~ 打印的效果,自己 ...

  6. lua解析赋值类型代码的过程

    我们来看看lua vm在解析下面源码并生成bytecode时的整个过程: foo = "bar" local a, b = "a", "b" ...

  7. 怎么调试lua性能

    怎么调试lua性能 我们的游戏使用的是Cocos2dx-lua 3.9的项目,最近发现我们的游戏.运行比较缓慢.想做一次性能优化了.其实主要分为GPU.CPU的分别优化.GPU部分的优化.网上有很多优 ...

  8. Lua 安全调用 metatable 的简单应用

    事情的经过 我们的项目中存在好几个战斗界面,不过界面中的内容略有不同.跟同事出去吃饭的时候,他问我.我们现在的战斗界面.有很多是重复的,但是也有偶尔几个地方不太一样.我在战斗过程中驱动这些界面的时候. ...

  9. 让Lua自己把文件夹下面的所有文件自动加载起来吧

    没有想到我也做了一回标题党.其实这里边说的自动还是有夸大其词的部分.其实只是指定文件夹,然后根据指定文件夹数据,加载目录下边的内容而已. 怎么来进行Lua文件的加载 一般情况下,相关的功能需要给他创建 ...

  10. 让Lua支持Linq吧

    第一次接触Linq是在使用C#的时候,这种语法,在处理列表数据非常方便.如果想了解Linq的更多内容可以百度一下Linq,不过你不了解也没关系,让我在Lua中给你展示一下Linq的魅力.简单点说,Li ...

随机推荐

  1. Python3编程技巧

    高效处理数据类型方法: In []: from random import randint In []: data=[randint(-,) )] In []: data Out[]: [-, -, ...

  2. 建表Table

    Sstudent表   学  号    Sno  姓  名   Sname   性  别    Ssex     年  龄      Sage   所 在 系    Sdept   200215121 ...

  3. Alluxio/Tachyon如何发挥lineage的作用?

    在Spark的RDD中引入过lineage这一概念.指的是RDD之间的依赖.而Alluxio则使用lineage来表示文件之间的依赖.在代码层面,指的是fileID之间的依赖. 代码中的注释指出: * ...

  4. Zookeeper 系列(三)Zookeeper API

    Zookeeper 系列(三)Zookeeper API 本节首先介绍 Zookeeper 的 Shell 命令,再对 Java 操作 Zookeeper 的三种方式进行讲解,本节先介绍 Zookee ...

  5. 交互神器-最好用的Mac原型设计工具

    市场上有着大量的开发和设计工具支持在Mac上安装使用,今天给大家强烈推荐一款Mac上的原型设计工具-Mockplus,原型工具在产品开发设计中是必不可少的,无论是现在非常火的小程序设计,还是网页设计, ...

  6. 利用windows.h头文件写一个简单的C语言倒计时

    今天写一个简单的倒计时函数 代码如下: #include<stdio.h> #include<windows.h> int main() { int i; printf(&qu ...

  7. 排列<一>

    理论和习题来源于书本,有些能用计算机模拟的题尽量用代码来解. 1.5个球放在3个不同的盒子里面,允许有盒子不放球,求有多少种可能?解:穷举,设盒子A,B,C,每个盒子都有0-5个球的可能,但是三个盒子 ...

  8. 对比手机SLAM和机器人SLAM

    陀螺仪?? IMU?? 加速度器与?? 人与机器 惯性定位与?? 步骤上对比Project Tango与SLAM

  9. 一个用css写出来的下拉菜单

    1 <style> 2 /* css*/ 3 #body{ 4 float: left; 5 } 6 #xialakuang{ 7 background-color:#f9f9f9; 8 ...

  10. HDU1349 Minimum Inversion Number 2016-09-15 13:04 75人阅读 评论(0) 收藏

    B - Minimum Inversion Number Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &a ...