5.1.1计算块

5.2长语句中,我们将了解长语句和子计算语句。它们主格的格串均以==开头而非=,集算器在计算时,会将以该格为主格的整个代码块视为一个语句,要整体计算,而不可拆开。集算器在按规则执行完本条语句后将忽略本代码块中的其它单元格。如:

 

A

B

C

1

==demo.query(

"select NAME as CITY,

 

2

 

STATEID as STATE from CITIES")

 

3

==A1.select(??)

=demo.query(

"select * from STATES where STATEID=?",

4

 

 

STATE)

5

 

if left(B3.ABBR,1)=="N"

>STATE=B3.NAME

6

 

 

=true

7

 

else

=false

在上面的代码中,前2行是A1为主格的长语句,查询出城市信息如下:

代码中的3~7行,是以A3为主格的子计算语句,从城市信息中,查询出所在州的简称以"N"开头的城市,并将它们的STATE字段赋值为州的名称。A3的计算结果如下:

这种以"=="开头的语句块又称为计算块,计算块其实就是一个计算语句。写在单行中的长语句或者子计算语句,其实也同样可以视为计算块。

 

一个代码块,它的主格就是起始格,我们再来了解一下什么是代码块格

如果满足:主格所在行下面的各行中,主格所在列及该列左侧的所有单元格均为空格,则这些行及主格所在行一起构成主格的代码块;直到在某一行中,主格所在列或其左侧的任一个单元格非空,则自该行起的各行均不再属于代码块。

 

A

B

C

D

1

 

 

 

 

2

 

>Code begin

 

 

3

 

 

 

 

4

 

 

 

 

5

 

 

 

 

6

Not null

Not null

 

 

在上面的网格中,如果B2是代码块的主格,如果满足绿色区域为空格,则第2~5行构成了主格B2的代码块。红色区域中的A6B6中任一个格子不是空格,无论是代码格、计算格、执行格、常数格甚至是注释格,都意味着从6行起不再是B2的代码块。

 

代码块并非仅用于一条语句,也经常用来在主格中放置语句,实现循环流程或分支流程等,如:

 

A

B

C

1

=demo.query("select NAME as CITY, STATEID as STATE from CITIES")

[]

 

2

for A1

=demo.query("select * from STATES where STATEID=?",A2.STATE)

 

3

 

if left(B2.ABBR,1)=="N"

>A2.STATE=B2.NAME

4

 

 

>B1=B1|A2

上面的代码中,使用了代码块,但是没有使用长语句或者子计算语句。其中A2为主格的代码块实现循环计算,B3为主格的代码块执行判断流程。B1中获得的结果同样是所在州的简称以"N"开头的城市。

我们在这里研究的代码块类型,并不包括这种用语句实现各种流程的情况,而是指用续格规则写在多个单元格中,执行时视为一个语句的代码块。续格规则就是指在计算格或执行格以字符 ,;( 结尾时,将自动拼接下一格内容,直到不是这些字符结尾或本代码块结束。