基础语法(if while case for continue exit try)

if 达 表 式
语法:if <expr1> then <expr2> [else <expr3>]
语法:if <expr1> do <expr2>
<expr1>为测试表达式,其求值结果必须为 True 或 False
如果测试结果为 True,
那么 then 或 do 之后的<expr2>被执行
其求值结果作为 if 表达式的返回值


 

case 达 表 式
case 表达式将一个测试表达式的结果和一系列标签表达式的标签进行比较,根据比较
结果从中选择一个标签表达式进行求值
语法:case [<expr>] of(<cases>)
其中<expr>是测试表达式,而<cases>是带标签的表达式序列,其语法为:
<factor>:<expr>
default : <expr>
-----------------------------------------------
new_obj = case copy_type.state of
(
2 : copy $foo
3 : instance $foo
default:reference $foo
)
---------------------------------------------------------------
如果用表达式作为标签,必须用括号把表达式括起来,例如:
case of
(
(a > b) : print "a is big"
(b < c) : print "b is little"
(c <= d*3) : ...
default: ...
)


while 循环
while 和 do 循环用来重复执行一个表达式, 直到测试表达式的求值结果为 False
语法:while <expr> do <expr>
其中 while 后面的<expr>为测试表达式,如果测试表达式结果为 True,将一直重复执
行 do 后面的<expr>
--------------------------------
x=10
while x > 0 do
(
print x
x -= 1
)


for 循环
语法:for <var_name>(in | =)<sequence>(do | collect)<expr>
<var_name> 为循环索引变量名,<sequence>为循环的源数值
可以为以下几种形式:
<expr> to <expr> [by <expr> ] [where <expr> ]
<expr> [where <expr> ]
--------------------------------------------------------
for i = 1 to 10 do print i --数字序列
for item in [able] do x = x+item.height --数组序列
for t in of to loof by 5f do --以帧为单位的时间序列
bigones = for obj in $Box*
where obj.height > 100 collect obj --将高度大于 100 的 Box 放到数组里
------------------------------------------
<sequence>形式都有一个可选的 where <expr>,其求值结果必须为 True 或 False
where 表达式在执行循环之前被求值,只有当它的结果为 True 时,才接着执行循环
do <expr> 形式的 for 循环简单地在每次循环时对<expr> 里的表达式依次求一遍值
循环变量<var_name>在循环体<expr> 里是可见的
------------------------------------------------
collect <expr> 形式的 for 循环收集每次循环时<expr> 的求值结果
并把它们存储在一个数组里,然后这个数组被作为 for 循环的返回值


continue 语 句
用来在 for、do、while 循环中直接跳至循环末尾,然后开始下一次循环
for i=1 to 8 do(if i == 5 do continue; print i)--打印 1..4, 6..8
-----------------------------------------------
while not eof f do --读入文件直至文件末尾
(
local line=readline f --读入一行
if line[1] == "-" do continue --如果为注释行,跳过本行
line1=parser1 line --调用函数 parser1
processobjs line1 --调用函数 processobjs
)


exit 语 句
在 for、do、while 循环中提前退出循环,即使循环测试表达式的值仍为 True
语法:exit [with <expr> ]
其中可选的 with <expr> 让用户指定提前退出循环时循环体的返回值,
如果未指定 with<expr>,返回值为 undefined
从一个 for…do 循环用 exit with <expr> 退出,返回值为 ok
从一个 for…collect 循环用 exit with <expr> 退出,返回值为退出前收集的元素组成的数组
----------------------------------------
while x < y do
(
local delta = x - y
if delta <= 0 then exit
$foo.pos.x = compute_x(foo / delta)
x += 0.1
)


try 达 表 式
捕捉代码段里任何运行错误,这样当错误发生时,可以采取相应的反应
语法:try <protected_expr> catch <on_err_expr>
<protected_expr>为要捕捉运行异常的表达式
一旦发现运行错误,<on_err_expr>将被执行
如果<protected_expr>为一个块表达式,执行将停在发生错误的那一行
如果没有发生运行错误,<on_err_expr>将不被执行
---------------------------------------------------------------
f = openFile "foo.dat"
try
while not eof f do read_some_data f
catch
(
messageBox "bad data in foo.dat"
results = undefined
)
close f
调用函数 read_some_data()过程中发现的任何错误将被捕捉到
然后系统会显示一个信息框

 

posted @ 2014-10-10 14:59  amixc  阅读(435)  评论(0编辑  收藏  举报