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

By admin at 2017-12-05 • 0人收藏 • 1376人看过
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语句中交替的交换运行代码的控制权,例如我们在某个对象内部实现了迭代器( 这个函数可能封装了大量的循环取值的代码 ),在使用该迭代器的时候只要简单的调用循环语句就可以( 代码可能就只要一两句 )。


登录后方可回帖

登 录
信息栏
 私人小站

本站域名

ChengXu.XYZ

投诉联系:  popdes@126.com



快速上位机开发学习,本站主要记录了学习过程中遇到的问题和解决办法及上位机代码分享

这里主要专注于学习交流和经验分享.
纯私人站,当笔记本用的,学到哪写到哪.
如果侵权,联系 Popdes@126.com

友情链接
Aardio官方
Aardio资源网


才仁机械


网站地图SiteMap

Loading...