Lua0

lua simple study

This project is maintained by wangfakang

这篇文章我不知道该不该写:
  由于我也是接触lua不久[还是之前项目需要,于是就边写代码边学习],其实我每次学习一门新的语言的时候   (我不会刻意的去学习),我觉得语言本身并不是问题而是想法[算法],比如你要去进行切割字符串,你知道   在go语言中有split这个函数,那么类似lua中是不是也应该有恩,这个时候只需要打开lua的文档进行search就ok[   当然这个地方又是考验一个人search的功底了就好像gg输入的关键字一样]好了闲话就不多说了:

lua学习的过程:
 首先lua是一个动态类型的语言,是解释执行的.
  值得注意的是lua的语法是很简单的:

1.基础数据类型

local order = 3.0
local score = 98.5
print(math.floor(order))   -->output:3   
print(math.ceil(score))    -->output:99 

nil是一种类型Lua将nil用于表示“无效值”。一个变量在第一次赋值前的默认值是nil,将nil赋予给一个全局变量就等同于删除它。

local num print(num) -->output:nil

num = 100 print(num) -->output:100

boolean(布尔)

布尔类型,可选值true/false;Lua中nil和false为“假”,其它所有值均为“真”。

table类型实现了“关联数组”。“关联数组” 是一种具有特殊索引方式的数组,索引可为字符串string或(整)数number类型。 注意:其下表是从1开始的[若没有使用其他的作为key].其中表也是lua中唯一一个数据结构,很强大的.

在Lua中函数 也是一种数据类型,函数可以存储在变量中,可以通过参数传递给其他函数,还可以作为其他函数的返回值。 如下: function foo() ... end

等价于

foo = function () ... end

2.值得注意的是lua中的逻辑运算发和其他语言中是不一样的:

 在其他语言中其逻辑运算最终都是返回一个bool类型的值,而在lua中则不是的,还有就是在lua中只有false和nil是假, 其他的都是真.
  在lua中其逻辑运算符如下:
 a = a or b 这个的含义等价于: a = a ? a:b; 相当于给a 一个默认值,如果a是有值的话则赋值a.
  在lua中没有三目运算符,但是可以这样写: val = a and b or c
注意:其实上面这么写的三目运算符还有点瑕疵:假如b此时的值是nil则得不到b而是c
 改善后:(a and {b} or {c})[1] 这样即使b是nil也可以取到了,主要利用刚才说的原则--条件假的只有false 和 nil

说白了在lua中的逻辑运算最终返回的是一个值,不一定只是bool而要看其参加运算的变量.

3.利用lua中的table可以做很多事情

  1.利用table可以做一个hash 2.可以做一个驱动表   3.还可以行面向对象的编程[把数据放到表中以及函数].   4.设置元表等[相当于一种重载]

4.lua可以与c c++等语言之间的交互:

  主要就是在lua和c之间有一个栈进行保存传递的参数,然后根据相应的约定进行运算.后面文章会详细讲解.

5.ffi机制

 The FFI library allows calling external C functions and using C data structures from pure Lua code. 官方的介绍: FFI库,是LuaJIT中最重要的一个扩展库。它允许从纯Lua代码调用外部C函数,使用C数据结构。有了它,就不用再像Lua标准math库一样,编写Lua扩展库。把开发者从开发Lua扩展C库(语言/功能绑定库)的繁重工作中释放出来。  当然这个要使用luajit才可以的. 如下: local ffi = require("ffi") ffi.cdef[[ int printf(const char *fmt, ...); ]] ffi.C.printf("Hello %s!", "world")

6.lua中的.与:的区别

local str = "abcde"
print("case 1:", str:sub(1, 2))
print("case 2:", str.sub(str, 1, 2))

输出结果一样: case 1: ab case 2: ab 使用:就可以不用在传递自己了(self).

欢迎一起交流学习

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

Thx

Author