aar中一种迭代器的用法(迭代显示表中值)

By admin at 2017-12-05 • 0人收藏 • 525人看过
import console; 


    baudRateIndex = {
		[50] = 0x00;
		[75] = 0x01;
		[110] = 0x02;
		[134] = 0x03;
		[150] = 0x04;
		[300] = 0x05;
		[600] = 0x06;
		[1200] = 0x07;
		[1800] = 0x08;
		[2400] = 0x09;
		[4800] = 0x0A;
		[7200] = 0x0B;
		[9600] = 0x0C;
		[19200] = 0x0D;
		[38400] = 0x0E;
		[57600] = 0x0F;
		[115200] = 0x10;
		[230400] = 0x11;
		[460800] = 0x12;
		[921600] = 0x13;
	}

eachBaudRate = function(){
	var b = {};
	for(k,v in baudRateIndex){b[v] = k};
	var i = -1;
	return function(){
		i = i + 1;
		return b[i];
	}
}

for baud in eachBaudRate(){
	console.log( baud )
}


console.pause(true);

blob.png

2 个回复 | 最后更新于 2017-12-05
2017-12-05   #1

其实上面是一个for in语句(迭代器)

这个是闭包的应用之一.

下面是一个闭包的示例:

io.open();
 

function 创建闭包(){

	var upvar = 23; 
	
	var 子函数 = function() { //函数里面可以定义子函数 
		io.print(upvar); //函数可以使用上层函数定义的局部变量
		upvar +=1; 
	} 
	
	return 子函数;

}
 

子函数 = 创建闭包(); //创建了新的闭包子函数()  
子函数() //闭包内部的upv被+1变成了24
子函数2 = 创建闭包(); //创建了新的闭包
子函数2() //子函数2所在的闭包内upvar的值还是23

在函数内部的函数,如果不在函数定义前面加上var语句,实际上等于定义了一个全局函数。
但是他同样可以使用上层函数的闭包内的数据,直到该函数不再有任何引用。


2017-12-05   #2

迭代器简单的讲就是在for in语句中用于循环取值的函数,下面是一个最简单的例子:

import console; 
 
/*
创建一个迭代器函数,
迭代器接受一个参数,返回一个或多个值 
*/var 迭代器 = function(控制变量){
	if(!控制变量) return 1;
	if(控制变量<10) return 控制变量+1;//第一个返回值、作为下一次调用迭代器的参数
}
//在for语句中循环调用迭代器函数,直到迭代器返回空值
for( 反馈结果 in 迭代器 ){ //for语句这对圆括号也可以省略
	console.log(反馈结果) 
}
 
console.pause(true);

迭代:是指循环取值并不断逼近最终目标的过程,每次取值的结果总是作为下一次迭代的初始值。具体到迭代器函数,就是每一次调用迭代器得到的第一个返回值总会作为下一次调用迭代器的参数 - 这个关键的迭代结果值我们称之为控制变量

迭代器就象一个生产者,而for语句就象一个消费者,这实现了类似协程的一种分工合作的机制,很好的分离了代码逻辑,在迭代器与for语句中交替的交换运行代码的控制权,例如我们在某个对象内部实现了迭代器( 这个函数可能封装了大量的循环取值的代码 ),在使用该迭代器的时候只要简单的调用循环语句就可以( 代码可能就只要一两句 )。


登录后方可回帖

登 录
信息栏
本站永久域名:HtmLayout.Cn
纯私人站,当笔记本用的,学到哪写到哪,目前在学aardio+halcon机器视觉.
Htmlayout界面在线学习文档
Sciter中文在线文档Sciter在线学习文档
本 站 主 站:Stm32cube中文网
Aardio 官方站:Aardio官方
Aardio最新功能:Aardio官方更新日志
aardio在线手册Aardio在线手册
C大Aardio论坛:Aar爱好者论坛
简码教程网:简码编程
AARDIO语言QQ群:70517368
赞助商:才仁机械
下载站:非凡软件站
Loading...