kotlin-高阶函数之自定义DSL入门

DSL:领域特定语言
可以根绝自己的需求自定义扩展语言,比如我们想给某个类型的List增加一个我们自定义的方法,就可以通过下面的方式写

data class PeopleBean(var name: String, var age: Int)

var peopleList = listOf(
    PeopleBean("李丽", 41),
    PeopleBean("王红", 38),
    PeopleBean("张靓颖", 17),
    PeopleBean("陈乔恩", 27),
    PeopleBean("宋祖儿", 26),
    PeopleBean("赵雅芝", 29),
    PeopleBean("刘涛", 18),
    PeopleBean("刘亦菲", 23)
)
//方法名 查找年龄大的女人 传的参数为age, 特别注意方法名前带的点 .
fun List.查找年龄大的女人(age: Int) {
	//filter是一个传入匿名函数染回集合 的函数
    filter {
        it.age > age
    }.forEach(::println)
}

正式调用

	peopleList.查找年龄大的女人(32)
    var list2 = listOf()
    list2.查找年龄大的女人(12)

如果前面加上infix,infix:中缀表达式,如果使用infix调用方法时,前面不需要用点 .
比如

//这个方法前面加上infix后,调用查找年龄大的女人 这个方法就直接用空格就可以
infix fun List.查找年龄大的女人(age: Int) {
    filter {
        it.age > age
    }.forEach(::println)
}
//正式调用,省去点 . ,直接用空格就好了
peopleList 查找年龄大的女人(32)

你可能感兴趣的:(Kotlin)