package com.zcz.FunctionsType
fun foooo2(baseName:String,baseAge:Int):String{
return baseName+"***"+baseAge + "\n"
}
fun foooo3(p:String,ia:Int):String{
return "paragram1:"+p+",paragram2:"+ia +"\n"
}
/**
* 使用函数类型作为形参类型 *
* */
fun map(data:Array<Int>,fnnn:(Int)->Int):Array<Int>{
var result = Array<Int>(data.size,{0})
for (i in data.indices){
result.set(i,fnnn(data[i]))
}
return result
}
/**平方**/
fun square(n:Int):Int{
return n*n
}
/**立方**/
fun cube(n:Int):Int{
return n*n*n
}
/**计算阶乘**/
fun factorial(n:Int):Int{
var result = 1
for (index in 2..n){
result *= index
}
return result;
}
/**
* 定义函数 该函数的返回值类型为(Int)->Int *
* **/
fun getMathFunc(type:String):(Int)->Int{
//局部函数
fun square(n:Int):Int{
return n * n
}
fun cube(n: Int):Int{
return n * n * n;
}
fun factorial(n: Int):Int{
var result = 1;
for (index in 2..n){
result *= index;
}
return result;
}
when(type){
"square" -> return ::square;
"cube" -> return ::cube;
else ->{
return ::factorial;
}
}
}
fun main(args:Array<String>){
/**
* *使用函数类型*
* 函数类型和数据类型一样,可用于定义变量,也可用作函数的形参类型,还可作为函数的返回值类型
*
* 函数类型组成:'函数的形参列表' + '->' + '返回值类型'
* **/
var functype:(String,Int) -> String
//直接访问一个函数的函数引用
functype = ::foooo2
print(functype("Tom",19))
//只要被赋值的函数类型与functype的变量类型一致,程序可以赋值成功
functype = ::foooo3
print(functype("User",178))
print("********************************************************\n")
/**使用函数类型作为形参类型**/
var data = arrayOf(4,5,6,7,8,9)
print("元数据:${data.contentToString()}\n")
print("计算数组元素的平方:${map(data,::square).contentToString()}\n")
print("计算数组元素的立方:${map(data,::cube).contentToString()}\n")
print("计算数组元素阶乘:${map(data,::factorial).contentToString()}\n")
/**使用函数类型作为返回值类型**/
var mathFunc = getMathFunc("square")
print("**${mathFunc(5)}**\n")
mathFunc = getMathFunc("cube")
print("**${mathFunc(6)}**\n")
mathFunc = getMathFunc("factorial")
print("**${mathFunc(7)}**\n")
}
控制台
Tom***19
paragram1:User,paragram2:178
********************************************************
元数据:[4, 5, 6, 7, 8, 9]
计算数组元素的平方:[16, 25, 36, 49, 64, 81]
计算数组元素的立方:[64, 125, 216, 343, 512, 729]
计算数组元素阶乘:[24, 120, 720, 5040, 40320, 362880]
**25**
**216**
**5040**
Process finished with exit code 0
网友评论