lua小结

这两天看lua,下面是个人感觉lua比较其他语言特别的地方(先记录这些,之后再编辑完善)

【热更新】
这个是重中之中,之前比较反感lua的,一个原因是比较熟悉python了,感觉多学几门也没什么用,
一门精就好了,不过想以后的游戏项目提高下开发效率,然后最重要的是想让游戏的逻辑代码可以
像资源那样可以服务器推送,不用每次出行的版本才可以改逻辑代码。
require("module_a")
package.loaded["module_a"] = nil   --多次加载module_a不会重新加载,所以把原先记录的那个给删了
require("module_a")

【require】
TODO:

【变量】
不声明local则为全局的(python则不声明则为global的)

【容易混淆的do end, then end, end】
while .. do
end

for ... do
end

if then
end

function()
end

【类型】(8种):
nil
boolean
number(是double来着)
string
table(里面包括了table和array的实现)
function
thread
userdata // 还没学习到这里

【lua没有continue】

【~=】不等于
lua中的!=是~=

【#】特别的长度符号:
#号可以表示string和table的长度,表示array长度没问题,当表示table的时候,容易错。

【闭包】是重点要学习,以前没学过

function iter()
 local i = 0
 return function()
  i = i + 1
  return i
  end
end
for i in iter() do
 if i <= 10 then
  print(i)
 else
  break
 end
end

【多值返回】
特别注意,之前有同学问为什么

function fun()
 return 'a', 'b'
end
print(fun())
print(fun(), fun())

的输出是
a, b
a, a, b
今天仔细看了书,原来
(1)当fun()作为最后一个参数或者仅有一个被调用的时候,它尽量多的返回值
(2)其他情况调用fun()则只返回一个
(3)可以用括号强制返回一个,(fun())返回a

【正则表达式】
在string.find什么里面有得写,没有像python那样有专门的re模块

【C++调用lua】
【vs2008配置】
项目->属性->c++->常规->附加包含目录(头文件目录)
项目->属性->链接器->常规->附加库目录(lib的路径)
项目->属性->链接器->输入->附加依赖项(lua5.1.lib lua51.lib)
在C++中写lua的C调用aip的时候要include头文件,记得得用

extern "C"{
#include "lua.h"
#include "lualib.h"
#incldue "lauxlib.h"
};

因为lua是用c实现的,之前没用extern "C",一直报link错误
【小例子】

lua_State* L = luaL_newstate();
luaL_openlibs(L); //打开标准库
const char* buffer = "print('hi')";
//往栈中push元素
luaL_loadbuffer(L, buffer, strlen(buffer), "line");
//从栈中pop元素处理,并执行
lua_pcall(L);
lua_close(L);


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值