我在 ECL 中有这个 SET
EXPORT TableNames := [
'tbl1',
'tbl2',
'tbl3',
'tbl4'
];
APPLY(TableNames, SomeFunctionPreviouslydefined);
。我想使用 APPLY 将其传递给函数。 申请不接受 SET:
">3002:"tblList"附近的语法错误:预期的范围、行集、自身、 成功, 数据行, 数据集, 字典, 模块名称, 标识符, 标识符、函数名称、标识符、宏名称、"+"、"^"、"(', '['">
我该怎么做?
尽管在文档中不是很清楚(https://hpccsystems.com/training/documentation/all - ECL 语言参考(,但您可以使用 DATASET 声明将 SET 转换为 DATASET,特别是以下形式:
[ attr := ] DATASET( recordset [, recstruct ] );
attr数据集的名称,供以后在其他定义中使用
记录集一组内联数据记录。这可以简单地命名以前定义的集合定义或显式使用方括号来 指示内联集定义。方括号内的记录 用逗号分隔。记录由以下任一方式指定:1( 使用 大括号 ({}( 以包围每条记录的字段值。这 每条记录中的字段值以逗号分隔。2( 一 以逗号分隔的内联转换函数列表,这些函数生成 数据行。列表中的所有转换函数都必须生成 以相同的结果格式记录。
recstruct可选。记录集的记录结构。仅当记录集参数仅为一条记录或 内联转换函数
因此,对于您的示例,您可以使用:
EXPORT Layout := RECORD
STRING tableName;
END;
EXPORT TableNames := [
'tbl1',
'tbl2',
'tbl3',
'tbl4'
];
ds_inlineLayout := DATASET(TableNames, {STRING tableName}); // Define the layout inline
ds_explicitLayout := DATASET(TableNames, Layout); // Use a an explicitly defined layout
OUTPUT(ds_inlineLayout);
OUTPUT(ds_explicitLayout);
最后,要在申请中使用它:
APPLY(ds_inlineLayout, SomeFunctionPreviouslydefined);