关于flex匿名函数和swift闭包

来源:互联网 发布:unity3d ios 模拟器 编辑:程序博客网 时间:2024/06/05 17:29

1.函数可以作为一个变量被定义:

var add:Function = function(a:int,b:int):Number
{
return a + b;


var menius:Function = function(a:int,b:int):Number
{
return a - b;


trace(calc(3,"+",4));
trace(calc(3,"-",4));
trace(calc(3,"*",4));

function calc(a:int,oper:String,b:int):Number
{
if(oper == "+")
return add(a,b);
else if(oper == "-")
return menius(a,b);
return undefined;
}

代码中定义了两种类型的运算函数,在calc函数中根据实际传入的操作符号来执行相应的计算.

当然如果上述代码,两个函数并没有被改动过,仅仅是调用完全可以写成常量参数的形式.在swift中用let关键字.


2.flex中的函数和swift中的函数都是引用类型的.


3.对swift中全局函数sorted的猜想:

function sorted(arr:Array,compare:Function):void
{
var m:int = 0,n:int = 0,c:int;
for(var i:int = 0;i < arr.length - 1;i++)
{
m++;
for(var j:int = 0;j < arr.length - 1 - i;j++)
{
var a:int = arr[j + 1];
var b:int = arr[j];
if(compare(a,b))
{
arr[j + 1] = b;
arr[j] = a;
c ++;
}
n++;
}
}//  
trace("共循环了"+(m*n)+"次,数据交换了"+c+"次");
}

sorted函数是对数组进行排序的函数,第一个参数是数组,第二个参数是一个闭包,表示的是以何种方式对数组进行排序.这里我用actionscript的方式进行猜想,我用compare函数作为参数表示闭包.sorted函数里面实际是一个冒泡排序算法.

如果是对数值数组进行排序可以这么写:

var arr:Array = [1,3,4,5,8,4];
sorted(arr,function(a:int,b:int):Boolean{
return a > b;
});

trace(arr);

这表示对数组进行从大到小的排序.如果是从小到大排序只需要将>改为<.

另外这个函数还有个小妙招:如果将>改为!=,数组将会反转.

实际上还可以对字符和字符串类型的数据进行排序,所以可以写成

private function sorted(arr:Array,compare:Function):void
{
for(var i:int = 0;i < arr.length - 1;i++)
{
for(var j:int = 0;j < arr.length - 1 - i;j++)
{
var a:* = arr[j + 1];
var b:* = arr[j];
if(compare(a,b))
{
arr[j + 1] = b;
arr[j] = a;
}
}

}

*号表示任意类型,这个有点不符合实际了,但是as里面并没有泛型,类似的东西在

swift里面有一个Equatable的协议,估计可以替代*.


0 0