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

概述
算术运算符
关系运算符
逻辑运算符
连接运算符
表构造式


概述

UL中的表达式包括数字常量、字符串常量、变量、一元和二元运算符、函数调用,还可以是非传统的函数定义和表构造。



算术运算符

二元运算符:+ - * / ^ (加减乘除幂)

一元运算符:- (负值)
备注:这些运算符的操作数都是实数。




关系运算符

●  <  >  <  =  >  =  ==  ~=
备注:返回结果为false或true;==和~=比较两个值,如果两个值类型不同,UL认为两者不同;nil只和自己相等。UL通过引用比较tables、 functions。也就是说当且仅当两者表示同一个对象时相等。
Eg:
  a = {};  a.x = 1;  a.y = 0
  b = {};  b.x = 1;  b.y = 0
  c = a
  a==c  but  a~=b
备注:当比较不同类型的值的时候要特别注意,混合比较数字和字符串UL会报错。比如:2 < "15"
Eg:
  "0" == 0      -- false
  2 < 15       -- true
  "2" < "15"      -- false



逻辑运算符

And:a  and  b      -- 如果a为false,则返回a,否则返回b

Or: a  or b      -- 如果a为true,则返回a,否则返回b
Eg:
  uPrintf  (4 and 5)    --> 5
  uPrintf  (nil and 13)    --> nil
  uPrintf  (false and 13)   --> false
  uPrintf  (4 or 5)     --> 4
  uPrintf  (false or 5)    --> 5
备注:逻辑运算符认为false和nil是假(false),其他为true,0也是true。



连接运算符

字符串连接,可使用操作符“..”如果操作数为数字,UL将数字转成字符串。
Eg:
  uPrintf  ("Hello " .. "World")  --> Hello World
  uPrintf  (0 .. 1)     --> 01


 UL操作符的优先级


备注:在二元操作符中,除了“^”和“..”是“右结合”的,其他操作符都是“左结合”的。
Eg:
  a+i < b/2+1    <-->   (a+i) < ((b/2)+1)
  5+x^2*8    <-->   5+((x^2)*8)
  a < y and y <= z   <-->   (a < y) and (y <= z)
  -x^2     <-->   -(x^2)
  x^y^z    <-->   x^(y^z)



表构造式

构造式是创建和初始化表的表达式。表是UL特有的功能强大的东西。最简单的构造函数是{},用来创建一个空表,可以直接初始化数组。
Eg:
  days = {"Sunday", "Monday", "Tuesday", "Wednesday",
  "Thursday", "Friday", "Saturday"}
  --[[ UL将"Sunday"初始化days[1](第一个元素索引为1),用"Monday"初始化days[2]...]]--
  uPrintf(days[4])      --> Wednesday

构造函数可以使用任何表达式初始化:
Eg:
  tab = {sin(1), sin(2), sin(3), sin(4),sin(5),sin(6), sin(7), sin(8)}

如果想初始化一个表作为记录使用可以这样:
Eg:
  a = {x=0, y=0}   <-->   a = {}; a.x=0; a.y=0

不管用何种方式创建表,我们都可以向表中添加或者删除任何类型的域,构造函数仅仅影响表的初始化。
Eg:
  w = {x=0, y=0, label="console"}
  x = {sin(0), sin(1), sin(2)}
  w[1] = "another field"
  x.f = w
  uPrintf  (w["x"])   --> 0
  uPrintf  (w[1])    --> another field
  uPrintf  (x.f[1])    --> another field
  w.x = nil     -- remove field "x"

在构造函数中域分隔符逗号(",")可以用分号(";")替代,通常我们使用分号用来分割不同类型的表元素。

UL中,超过一层的表结构在作为全局变量时会失效。
Eg:
  w = {a[1], y=0, label="console"}  --w[1]的值只能在当前代码块中有效。而w.y是一个全局变量,在一个脚本球内均有效。

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