我是ECL的新手,在理解RIGHT和LEFT关键字(用于DEDUP、GROUP和其他函数(时遇到了困难。它们是如何工作的?ECL参考指南只有一段关于它应该做什么的内容
例如,它在这个代码中做什么?
MyRec := RECORD
STRING1 Value1;
STRING1 Value2;
END;
SomeFile := DATASET([{'C','G'},
{'C','C'},
{'A','X'},
{'B','G'},
{'A','B'}], MyRec);
Dedup2 := DEDUP(Val2Sort, LEFT.Value2 = RIGHT.Value2);
显然问题出在我查看数据的方式上。为了更容易理解,我将DATASET格式化为一列,结果弄乱了我的查看。LEFT和RIGHT是DATASET中的每个注册表,应该这样查看:
DATASET([{'C','G'},{'C','C'},{'A','X'},{'B','G'},{'A','B'}])
这样,在它的第一次迭代中,{'C','G'}(左(将与{'C','C'}(右(进行比较,依此类推
LEFT和RIGHT是ECL中的标准命名约定,当同时处理两个记录集时。对于像DEDUP、ROLLUP和ITERATE这样的语句,LEFT和RIGHT指的是同一记录集中的记录对,LEFT是对中的第一条记录,RIGHT是第二条记录。
在JOIN语句中,LEFT和RIGHT可以是不同的记录集。当您探索ECL时,该语言具有强大的数据转换函数,恰当地命名为TRANSFORM函数。在这些函数中,您将看到另一个名为SELF的关键字,它表示任何转换的输出。
所以在一个典型的JOIN中;"左"对";,以及";自我;同时记录在内存中。因此,当字段名称相同时,关键字有助于编译器区分您引用的记录中的哪个字段(例如"地址"字段(。
RIGHT和LEFT关键字在此上下文中所做的所有操作都指示您希望在右侧和左侧使用哪个数据集。在ECL的其他上下文中,这可能意味着您希望在过程完成后将数据保留在右侧或左侧
这里没有。