(2007.11.13)
今天更新了“易语言.飞扬”编译器,改进了“遍历循环(foreach)”。
之前的“遍历循环”,支持对数组和“可遍历对象”进行遍历;改进后的“遍历循环”,支持对数组和“遍历器对象”进行遍历。
对数组的支持都是特例,下面重点对比一下之前的“可遍历对象”和现在的“遍历器对象”。
之前对“可遍历对象”的定义为:具有公开的“创建遍历器()”方法的对象,此方法返回一个“遍历器对象”。“遍历循环”自动查找并调用“创建遍历器()”方法获取“遍历器对象”。
“遍历循环”接收“可遍历对象”作为参数的话,意味着这个对象只能(通过“创建遍历器()”)创建一个(一种)“遍历器对象”,即只能以“一种”特定的方式被遍历。但实际的需求中,可能需要对同一个对象进行不同方式的遍历,如二叉树对象,可能需要前序遍历、后序遍历、中序遍历。之前的“遍历循环”显然是无法满足此需求的。
改进后的“遍历循环”,接收“遍历器对象”作为参数,把“创建遍历器”的动作交给用户(或类库),很大程度上提高了程序和类库的灵活性。例如二叉树对象,可以提供“创建前序遍历器()”“创建后序遍历器()”“创建中序遍历器()”等方法,分别创建出不同的“遍历器对象”,从而满足上述多种遍历方式的需求。
此次修改前后,对“遍历器对象”的定义没有改变,它是这样一个对象:
1、必须有一个或多个标记为“遍历方法”的方法(称为“遍历方法”)
2、“遍历方法”必须是公开的、无参数的,必须返回两个值:第一个返回值为任意数据类型,用于返回当前遍历出的数据;第二个返回值为逻辑型,为真表示第一个返回值有效,