最近我回看以前记的关于Notes的笔记,发现在Notes bugs类别下,两条编号间隔一的竟然是相差无几的内容。
2. 'Type mismatch' occurs if an nested array e.g. when an item of ColumnValues is an array,is assigned to a variant or passed as an argument of a function.
4. When an item of ColumnValues is an array,'Type mismatch' occurs if it is assigned to a variant,e.g.columns=entry.Columnvalues
这至少说明两件事。一是当我初次遇到以上错误,记录下之后,并未注意避免,甚至完全忘记了,下次再撞上时,还会当成新发现记录。二是我的英语保持在同样的水准上,在叙述同一件事情上风格基本一致。
对这个在同一地方跌倒两次的教训,我觉得有必要说一说。既可以提醒大家不要重蹈我的覆辙,也能加深我自己的印象,以免下次又记上一条重复的笔记。
LotusScript中Variant之来源
为了全面理解这个问题和多凑些字数,要从variant(变体型)说起。Visual Basic中变体型是一种能容纳各种数据类型的数据结构【注1】。技术上说,它是taggedunion(加标签的联合),占用十六字节的内存,前两字节保存数据类型的编码(即标签),第三至八字节为了对齐而空白,第九至十六共八个字节保存实际的数据(即联合)。前两字节的内容可以用VarType函数返回如下:
Constant |
Value |
Description |
|
vbEmpty |
0 |
Empty (uninitialized) |
|
vbNull |
1 |
Null (no valid data) |
|
vbInteger |
2 |
Integer |
|
vbLong |
3 |
Long integer |
|
vbSingle |
4 |
Single-precision floating-point number |
|
vbDouble |
5 |
Double-precision floating-point number |
|
vbCurrency |
6 |
Currency value |
|
vbDate |
7 |
Date value |
|
vbString |
8 |
String |
|
vbObject |
9 |
Object |
|
vbError |
10 |
Error value |
|
vbBoolean |
11 |
Boolean value |
|
vbVariant |
12 |
Variant (used only with arrays of variants) |
|
vbDataObject |
13 |
A data access object |
|
vbDecimal |
14 |
Decimal value |
|
vbByte |
17 |
Byte value |
|
vbLongLong |
20 |
LongLong integer (Valid on 64-bit platforms only.) |
|
vbUserDefinedType |
36 |
Variants that contain user-defined types |
|
vbArray |
8192 |
Array |
Return |
Value type |
Constant |
Variants only |
0 |
EMPTY |
V_EMPTY |
Yes |
1 |
NULL |
V_NULL |
Yes |
2 |
Integer |
V_INTEGER |
|
3 |
Long |
V_LONG |
|
4 |
Single |
V_SINGLE |
|
5 |
Double |
V_DOUBLE |
|
6 |
Currency |
V_CURRENCY |
|
7 |
Date/Time |
V_DATE |
Yes |
8 |
String |
V_STRING |
|
9 |
OLE object or NOTHING |
V_DISPATCH |
Yes |
10 |
OLE error |
V_ERROR |
Yes |
11 |
Boolean |
V_BOOLEAN |
|
12 |
Variant list or array |
V_VARIANT |
|
13 |
IUNKNOWN (OLE value) |
V_IUNKNOWN |
Yes |
17 |
Byte |
V_BYTE |
|
34 |
User-defined object |
V_LSOBJ |
|
35 |
Product object |
V_PRODOBJ |
|
2048 |
List |
||
8192 |
Fixed array |
||
8704 |
Dynamic array |