关于高阶函数的理解(lambda)

来源:6-2 小案例:HTML DSL开发

慕妹2978617

2019-11-26

感觉这张有点超出自己的理解范围了,很多东西多看几遍好像是懂了但是,出现类似的,会发现又不懂而且感觉之前的理解也不对。比如这两个方法:

operator fun String.invoke(block: Tag.() -> Unit) {
        children.add(Tag(this).apply(block))
    }

效果:

 "head"{
            "id"("headId")
        }
fun html(block:Tag.()->Unit):Tag{
    return Tag("html").apply{
        block(this)
    }
}

效果:

"id"("htmlId")

其中

  children.add(Tag(this).apply(block))

return Tag("html").apply{
        block(this)
    }

方法体很像,但是又不同,老师能先帮我解释下嘛?
还有一个问题

虽然学习之前的高阶函数已经明白了。但是多个高阶函数组合后要捋好几遍才能明白。这以后我要如何去运用呢,因为现在看都费劲,恐怕自己写的时候也无法写出优秀的kotlin代码

另一个问题
我还是无法理解函数为第一公民这句话,很难写出面向函数编程的代码,比如一些简单操作符还是很难去看懂,比如Tag.()->UInt 这种函数参数我很难知道他实际什么样子的参数才是复合这种参数格式,老师有什么学习的建议嘛

写回答

3回答

bennyhuo

2019-11-27

你说单个函数都能理解,多了串联起来就反应不过来了,这个太正常不过了,函数式编程本来就很抽象,大多数没有接触过函数式编程的同学学到这里都一开始反应不过来,这个就只能多看多练,没有别的办法,你的函数式思维练出来以后就很自然了。

0
0

bennyhuo

2019-11-27

最开始你觉得比较像的就是apply传lambda还是直接传block吧。这个问题主要是你需要理解apply需要一个函数对象做为参数,传入的lambda和block都是函数对象

0
0

bennyhuo

2019-11-26

这个嘛,需要时间啦,函数是一等公民就是说它跟字符串一样可以去传递,可以变换,如果你能有这个感觉,就有了函数的感觉。

函数难得原因主要还是背后的数学,不过熟练了自然就没什么了,建议就是多练习~

回头再给你写个详细点儿的建议

0
0

Android首选开发语言Kotlin入门与进阶

Google I/O大会钦定Android一级开发语言,现在不学,等待何时

3122 学习 · 387 问题

查看课程