效不雅和膳绫擎的代码一样。
在C++中应用函数指针可以实现类似的效不雅:
- using namespace std;
- void mMap(vector list, void (*fun)(int item));
- int main(int arg, char* args[]) {
- vector list = {2,3,4,3,2,1,2};
- mMap(list, [](int item) -> void { cout << item << endl; });
- }
- void mMap(vector list, void (*fun)(int item)) {
- for(int it : list) {
- fun(it);
- }
- }
再次回到Kotlin,如不雅函数作为入参在入参列表的最后一个,你还可以如许做,直接写在大年夜括号内:
- fun main(args: Array) {
- log { sum(1,2) }
- }
- fun log(function: () -> T) {
- val result = function()
- println("result -> $result")
- }
是不是有点像gradle设备文件的写法,所以Kotlin可以很便利的编写 范畴专用说话(DSL)
它不是一个通俗的变量,它必须指向一个函数,并且函数签名必须一致:
别的Kotlin还支撑局部函数和函数作为返回值,看下面的代码:
- fun main(args: Array) {
- val addResult = lateAdd(2, 4)
- addResult()
- }
- //局部函数,函数引用
- fun lateAdd(a: Int, b: Int): Function0 {
- fun add(): Int {
- return a + b
- }
- return ::add
- }
在lateAdd内部定义了一个局部函数,最后返回了该局部函数的引用,对结不雅应用()操作符拿到最终的结不雅,达到延迟计算的目标。
函数作为一级公平易近当然可以像通俗对象一样放进map中,比如下面如许:
- val funs = mapOf("sum" to ::sum)
- val mapFun = funs["sum"]
- if (mapFun != null) {
- val result = mapFun(1,2)
- println(
推荐阅读
如不雅办事调用的缺点率高于预先设置的缺点率。 Circuit-breaker 的状况会大年夜 CLOSED 变成 OPEN(熔断状况)。 当 Circuit-breaker 状况为 OPEN 时,所有进来的请求会被阻拦。 过一段时光,会让一些单>>>详细阅读
本文标题:Kotlin函数与函数式编程浅析
地址:http://www.17bianji.com/lsqh/35653.html
1/2 1