2014.4.26 lua基础篇一

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机制,实现多态.相关原理和方法需要进一步学习,做详细笔记; 
原文地址:https://www.cnblogs.com/fegnze/p/3692034.html