1> xcode中,AppController.mm,.mm文件是为了调起来系统的c++/oc混合编译器clang++;
2> lua基本语法:
--1. 前天参加了一个面试,被问到lua的.和:的区别,表示出了lua这个名字其它一概不知,因此回来补一下;
. 和: 符号用于函数调用,因此先学习一下lua的函数;
语法: function func-name (func-arguments)
func-body
end
func-name = function (func-arguments)
func-body
end
第二种方法是因为lua的函数是带有词法定界的第一类值,大概理解如下:
词法定界是一个静态域概念,标识符的绑定与程序运行无关,至于程序语句的组织有关,简单来说这一特性使得lua的函数可以嵌套,且内部函数可以访问外部函数定义的成员,参数,以及全局函数(http://blog.sina.com.cn/s/blog_6ce94de50100o2au.html);也就是lua闭包的概念;(这么说不太合适,关于闭包等,将在以后的学习中逐步解释和修正);
第一类值,意思是一个对象在运行期间被创建,可以当成参数传递;这就允许将函数定义为一个变量,也就是第二种写法;
解释下.和: ,
但有如下定义时
T = {
function func-name (self,func-arguments)
func-body
end
}
T.func-name(self)就相当于T:func-name ()
@@@@ . 虽然在这里":"的写法不具有特殊意义(都将可以用"."方式实现),但":"事实上提供了隐式self参数的机制,为OO(面向对象)提供了可能和基础;
关于函数的可变形参,"..."所代表的形参可以在函数中访问arg局部变量得到,arg为table类型
--2. 下面整理一下对lua语法的一些基本认识:
@. 先说注释,当行"--",多行"--[[" "]]","[[" "]]"可以嵌套;
@. lua的"="可以多赋值;eg:a,b,c = 1,2,3;
@. "..."函数可变形参
@.与c语言比较,lua有些不一样的操作符(按优先级从高到低):
^幂运算;
一元操作符包括"-","not",取长"#"; --字符串的长度为字节数(一字符一个字节),table的长度为整数下标,任何一个nil值都将使table结束;
算数运算符与c语言一致;
字符串链接操作符".."
关系运算符"~=" 相当于C语言的"!="
逻辑运算符 and or (and高于or) --a and b 若a为true,则返回b;
--a or b 若a为true,则返回a;
--模拟c语言的三目运算符 x = a?b:c; lua可以写为x = a and b or c;(=优先级最低)
--x = x or v 相当于if not x then x = v end
@.变量定义:
没有使用过的变量值都为nil,如果要清除一个变量可以给变量赋值为nil;
Boolean,在lua中,只有nil和false的值被解释为fasle,其它都为true,比如负数,0,空字符串"";
Number,在lua中没有整数
String的定义方法: "one line\nnext line\n\"in quotes\", 'in quotes'" (单引号或双引号,可嵌套)
"[[" "]]"定义字符串时可以自动换行 eg:
page = [[
<HTML>
<HEAD>
<TITLE>An Html Page</TITLE>
</HEAD>
<BODY>
<A HREF="http://www.lua.org">Lua</A>
[[a text between double brackets]]
</BODY>
</HTML>
]]
lua对大小写敏感
@.Table 关系表类型:
根据初步理解,table可实现两个主要功能:
(1).实现数组的功能;
有以下特性:
T1 = {} --定义一个空表
T1[1] = 10 --类似C语言,用下表操作,索引值都必须用"[]",字符串除外
T1 = {100} --如果不写索引值,索引值从1开始往后编,如,此时T1中的100索引为2;
T1 = {"Tom"} --lua的table表不区分存储类型
T1.Sam = 25; --也可以用字符串做索引值,如,T1["Sam"] = 25,此时可以简化为T1.Sam = 25
T1.Devid = {age = 10,sex = "man"}; --同T1.Devid["age"] = 10 T1.Devid["sex"] = 'man'
--lua的table可以嵌套元素之间用","隔开
--一下是一种简化的表写法,方便使用
T1 =
{
10, --相当于[1] = 10;
[100] = 20, --table表并不用按照顺序,但省略的索引将按顺序填充
John = --也可以写成["John"] =
{
Age = 25 --可以写为["Age"] = 25
Sex = "man"
}
50 --相当于[2] = 50
}
(2).实现lua的面向对象;
由于元表的灵活特性,使其完全有能力模仿出c++class机制,实现多态.相关原理和方法需要进一步学习,做详细笔记;