脚本进阶教程 位置导航:首页 > 资料中心 > 脚本进阶教程
   脚本语法说明—语句

概述
赋值语句
局部变量与代码块
控制结构语句
break与return



概述

UL几乎支持所有的传统语句:赋值语句、控制结构语句、函数调用等,同时也支持非传统的多变量赋值、局部变量声明。



赋值语句

●  UL可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量。
Eg:
  a, b = 10, 2*x   <-->   a=10; b=2*x

遇到赋值语句UL会先计算右边所有的值然后再执行赋值操作,所以我们可以这样进行交换变量的值。
Eg:
  x, y = y, x        -- swap ’x’ for ’y’
  a[i], a[j] = a[j], a[i]      -- swap ’a[i]’ for ’a[i]’

当变量个数和值的个数不一致时,UL会一直以变量个数为基础采取以下策略:
a. 变量个数>值的个数 按变量个数补足nil
b. 变量个数<值的个数 多余的值会被忽略
Eg:
  a, b, c = 0, 1
  uPrintf(a,b,c)       --> 0 1 nil
  a, b = a+1, b+1, b+2      -- value of b+2 is ignored
  uPrintf(a,b)        --> 1 2
  a, b, c = 0
  uPrintf(a,b,c)       --> 0 nil nil



局部变量与代码块

局部变量:使用local创建一个局部变量,与全局变量不同,局部变量只在被声明的那个代码块内有效。

代码块:指一个控制结构内,一个函数体,或者一个chunk(变量被声明的那个文件或者文本串)。
Eg:
  x = 10
  local i = 1        -- 给局部变量赋值
  while i<= x do
  local x = i*2
  uPrintf(x)        --> 2, 4, 6, 8, ...
  i = i + 1
  end
  if  I  >  20  then
  local  x
  x = 20
  uPrintf(x + 2)
  else
  uPrintf(x)       --> 10 (the global one)
  end
  uPrintf(x)        --> 10 (the global one)

使用局部变量的好处 :
? 避免命名冲突。
? 访问局部变量的速度比全局变量更快.。



控制结构语句

控制结构的条件表达式结果可以是任何值,UL认为false和nil为假,其他值为真。

if语句:先测试其条件,然后根据测试结果执行then部分或else部分,else部分是可选的,编写嵌套的if可使用elseif。
Eg:
  if  conditions  then
    then-part
  end;
  if  conditions  then
    then-part
  else
    else-part
  end;
  if  conditions  then
    then-part
  elseif conditions then
    elseif-part
  ..                               --->多个elseif
  else
    else-part
  end;

while语句:UL先测试while的条件。如果条件为假,循环结束;不然,执行循环体并重复。
Eg:
  local  I = 1
  while  a[i]  do
    uPrintf  (a[i])
    i=i+1
  end

●  repeat:repeat-until语句重复执行其循环体直到条件为真时结束。循环体至少会执行一次。

●  for语句:for语句有两种,数值for循环和范型for循环。

 数值for循环:
Eg:
  for var=exp1,exp2,exp3 do
  loop-part
  end
  --[[ for将用exp3作为step从exp1(初始值)到exp2(终止值),执行loop-part。其中exp3可以省略,默认step=1 ]]--
备注:
  1. 三个表达式只会被计算一次,并且是在循环开始前。
  2. 控制变量var是局部变量自动被声明,并且只在循环内有效.
  3. 循环过程中不要改变控制变量的值,那样做的结果是不可预知的。如果要退出循环,使用break语句。

●  范型for循环:范型for遍历迭代子函数返回的每一个值。
Eg:
  for k in pairs(t) do uPrintf(k)  end        -- 输出表中“t”的所有值
备注:范型for和数值for有两点相同
  1. 控制变量是局部变量。
  2. 不要修改控制变量的值。



break与return

●  break语句用来退出当前循环(for,repeat,while)。在循环外部不可以使用。|

●  return用来从函数返回结果,当一个函数自然结束结尾会有一个默认的return。

●  UL语法要求break和return只能出现在block的结尾一句(也就是说:作为chunk的最后一句,或者在end之前,或者else前,或者until前),
Eg:
  local i = 1
  while a[i] do
  if a[i] == v then break end
  i = i + 1
  end

.
公司介绍  |  由我博客  |  招聘信息  |  商务合作 |  媒体合作  |  联系我们  |  新浪微博  |  开心多尼
优万科技(北京)有限公司 版权所有 京ICP证08336号 ISBN 978-7-900648-32-7 《网络文化经营许可证》编号:文网文[2009]076号 新出网证(京)字099号
Copyright (C)2007-2010 UOneNet CO., LTD. All Rights Reserved.