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的协议,估计可以替代*.