这里的字符串常数,并不是指简单的用双引号括起来的字符串,或是一个字符串类型的常数,而是指用$[…]的模式表示的字符串。
从使用上来看,$[…]和"…"是相同的,都是在表达式中表示…所构成的字符串。如:
|
A |
1 |
="abc"+$[ABC] |
2 |
="\"[abc]\""+$["[ABC\]"] |
A1和A2中的计算结果如下:
可以看到,$[…]和"…"的使用基本类似,字符串中都可以用 \ 作为转义符来标记其中有歧义的字符,如普通字符串中的"和字符串常数中的 ]。
实际上,字符串常数$[…],经常用在宏或者eval函数中。在集算器的编辑界面中,$[…]的内容中出现的单元格名将会随着编辑操作变迁,也可以在复制粘贴等操作时调整表达式。这样,当需要用字符串常数来返回一个单元格的名称时,它的这种特性就可以保证在网格结构发生变化时不致造成表达式错误。如:
|
A |
B |
1 |
select * from STATES |
=demo.query(A1) |
2 |
POPULATION>10000000 |
=demo.query($[${A1} where ${A2}]) |
3 |
left(ABBR,1)='C' |
=demo.query($[${A1} where ${A2} and ${A3}]) |
B2和B3中,在字符串常数中,嵌套使用了宏,用单元格值生成query函数的查询字符串。其中,B2中查询人口大于10,000,000的州:
B3中查询人口大于10,000,000且缩写的首字母为C的州:
此时,如果在第2行之前添加1个空行,则网格如下:
|
A |
B |
1 |
select * from STATES |
=demo.query(A1) |
2 |
|
|
3 |
POPULATION>10000000 |
=demo.query($[${A1} where ${A3]) |
4 |
left(ABBR,1)='C' |
=demo.query($[${A1} where ${A3} and ${A4}]) |
可以看到,B3和B4表达式中的单元格名做了自动更正。而由于"…"表示的字符串中无法使用宏,同时"…"中的内容也不会随着编辑操作而改变,所以在特定的情况下不适用。