lua学习2
语句Lua支持多重赋值,就是可以将多个值同时赋值给多个变量。
123456a, b = 3, 'a'x ,y = y, x #一行语句进行交换变量a, b, c = 1, 2print(a, b, c) a, b = 1, 2, 3print(a, b) --> 1 2
控制结构if / else 语句,lua不支持switch语句,示例如下:
1234567891011121314151617if a < 0 then a = 0endif a < 0 then a = 0else a = 1endif a < 0 then a = 0elseif a = 0 then a = 1else a = 2end
while循环语句
12345local i = 1while a[i] do print(a[i]) i = i + 1end
repeat语句,一条repeat-until语句重复执行循环体直到条件为真时结束。循环体至少会执行一次。跟其他语言的do-while循环有点区别就是,do-while当条件为假的时候停止循环。
12 ...
Lua 排序算法
选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理如下,首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的序列进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。
算法步骤
首先在未排序序列中找到最小元素,存放到排序序列的起始位置
再从剩余未排序元素中继续寻找最小元素,然后放到已排序序列的末尾。
重复第二步,直到所有元素均排序完毕。
动画演示
Lua 实现
local function selectionSort(arr)
for i = 1, #arr-1 do
local idx = i
-- 迭代剩下的元素,寻找最小的元素
for j = i ...
Lua
读书笔记: Programming in Lua, 4th Edition.
正常函数调用
print(8*9, 9/8)
a = math.sin(3) + math.cos(10)
print(os.date())
-- add the elements of sequence 'a'
function add (a)
local sum = 0
for i = 1, #a do
sum = sum + a[i]
end
return sum
end
if the function has one single argument and that argument is either a literal string or a table constructor,
then the parentheses are optional:
如果函数只有一个参数,并且这个参数是字符串或者是table的话,函数的括号()可以省略。
print "Hello World" <--> p ...
nginx lua 环境搭建
目录结构
drwxr-xr-x. 6 wang wang 93 May 15 2015 LuaJIT-2.0.4
-rw-r--r--. 1 root root 847615 Jun 6 21:16 LuaJIT-2.0.4.tar.gz
drwxrwxr-x. 9 root root 4096 May 26 10:41 lua-nginx-module-0.10.5
-rw-r--r--. 1 root root 579793 Jun 6 21:35 lua-nginx-module-0.10.5.tar.gz
drwxr-xr-x. 9 work work 4096 Jun 6 21:25 nginx-1.10.1
-rw-r--r--. 1 root root 909077 Jun 6 21:17 nginx-1.10.1.tar.gz
drwxrwxr-x. 9 root root 4096 May 10 05:28 ngx_devel_kit-0.3.0
-rw-r--r--. 1 root root 66455 Jun 6 21:3 ...
System Center Virtual Machine Manager 2012 RCampndash Evaluation开放下载
<p>System Center Virtual Machine Manager 2012 RC– Evaluation开放下载</p>
<br />
<p>System Center Virtual Machine Manager 2012 已经推出2012的RC版了~离上是应该不远了,相关新功能如下</p> <ul> <li>
Fabric Management Setup Upgrade *New in RC -Upgrade- Setup will support the following upgrade paths: VMM 2008 R2 SP1 --SC VMM 2012 RC – SC VMM 2012 RTM SC VMM ...
ulua学习笔记1
本文为bbbbbbion(可以叫我六饼)原创总结,如有疏漏请各位拍砖留言。转载请尊重原作者成果,保留出处。这一系列用于记录笔者学习ulua热更新的过程。首先来看Windows下lua环境的搭建。
环境:lua for windows (lfW)主页:http://luaforwindows.luaforge.net/
lua for windows是一整套Lua的开发环境,主要包括:
Lua Interpreter(Lua解释器)
Lua Reference Manual(Lua参考手册)
Quick Lua Tour(Lua快速入门)
Examples(Lua范例)
Librarier with documentation(一些Lua库和文档)
SciTE(一款多用途编辑器,已经对Lua做了特殊的设置)
上述提到的主页上可以下载lfW(需要翻~墙),最新版本为:5.1.4-46。一路默认安装,最后一步会询问是否使用SciTE默认的“黑色”风格,一般建议勾选。
使用SciTE:打开SciTE,新建文件,输入print(“hello world”),然后保存 ...
lua面向对象学习
元表和元方法 在Lua中,每个值都有一个元表,table和userdata类型的每个变量都可以有各自独立的元表, 其他类型的值则共享其类型所属的单一元表。
基本的metatable
创建新的table时不会创建元表
getmetatable(table) 获取table或者userdata类型变量的元表
setmetatable(t,ot) 设置table或者userdata类型变量的元表
123456local t = {1,1}print getmetatable(t) -- nillocal t1 = {}setmetatable(t,t1)assert(getmetatable(t) == t1)
Lua代码中,只能设置table的元表,若要设置其他类型的值的元表,必须通过C代码来完成。
标准的字符串程序库为所有的字符串都设置了一个元表,其他类型在默认情况下没有元表。
table中可以重新定义的元方法:
1234567891011121314151617__add(a,b) --加法__sub(a,b) --减法__mul(a,b) --乘法__d ...
Lua 学习 chapter16
目录
编译
错误
错误信息和栈回溯
You must try your best. Then you will have a good improvement.
编译
dofile函数,加载文件并且执行文件中的代码。其实dofile并不是运行lua代码的核心,核心是loadfile函数。
1
2
3
4
function dofile(filename)
local f = assert(loadfile(filename))
return f()
end
如果loadfile执行失败,那么函数assert会引发一个错误。相较于dofile,loadfile在发生错的时候会返回nil以及错误信息。而且在多次运行这个文件的时候,loadfile只需要加载一次后面可以多次调用。
函数load函数和loadfile函数非常的相似,但是加载的不是文件而是字符串。函数load总是在全局环境中编译代码片段,所以里面的值也都是针对于全局变量的。
loadfile() 只加载编译代码,不执行, 返回一个function. loadfile的时候必须使用文件全名(带上 ...
lua性能优化技巧
前言
和在所有其他编程语言中一样,在Lua中,我们依然应当遵循下述两条有关程序优化的箴言:
原则1:不要做优化。
原则2:暂时不要做优化(对专家而言)。
这两条原则对于Lua编程来说尤其有意义,Lua正是因其性能而在脚本语言中鹤立鸡群。
当然,我们都知道性能是编程中要考量的一个重要因素,指数级时间复杂度的算法会被认为是棘手的问题,绝非偶然。如果计算结果来得太迟,它就是无用的结果。因此,每一个优秀的程序员都应该时刻平衡在优化代码时所花费的资源和执行代码时所节省的资源。
优秀的程序员对于代码优化要提出的第一个问题是:“这个程序需要被优化吗?”如果(仅当此时)答案是肯定的,第二个问题则是:“在哪里优化?”
要回答这样两个问题,我们需要制定一些标准。在进行有效的性能评定之前,不应该做任何优化工作。有经验的程序员和初学者之前的区别并非在于前者善于指出一个程序的主要性能开销所在,而是前者知道自己不善于做这件事情。
几年前,Noemi Rodriguez和我开发了一个用于Lua的CORBA ORB[2]原型,之后演变为OiL。作为第一个原型,我们的实现的目标是简洁。为防止对额外的C函数库的依赖,这个 ...
lua 与 C 交互
lua和C交互的核心就是lua栈,lua和C的所有数据交互都是通过lua栈来完成的。
一. C调用luaC调用lua很简单,通常C以lua作为配置脚本,在运行时读取脚本数据,主要步骤:
加载脚本 luaL_loadfile
运行脚本 lua_pcall
获取数据 lua_getglobal ….
使用数据 lua_tostring lua_pcall …
二. 在lua脚本中调用C:在C程序中,使用lua作为脚本,但是要在运行脚本时,访问C中定义的一些变量或函数。
将C变量或函数(遵从指定函数原型,见下面三 Step 1)push到lua栈中
通过lua_setglobal为当前lua栈顶的函数或变量命名,这样在lua中可通过该名字完成对变量或函数的使用
之后可在加载的lua脚本中使用C变量或函数
三. 将C函数封装为一个库,为lua所用将C函数编译为动态库文件,这样可以在lua主程序中,加载这个库文件,并使用其中的C函数。
Step 1. 在mylib.c中定义给lua调用的C函数 函数原型为: int (lua_State*)如:
static int c ...