引入
当我们在适用函数参数的时候,并且调用,是这样写的:
1 | fun notNullFun(block: () -> Unit) { |
其实还有一种写法,那就是调用invoke
方法:
1 | fun notNullFun(block: () -> Unit) { |
在这里看不出有啥区别,但是如果我们在使用一个可空类型的属性时:
1 | val nullVal: (() -> Unit)? = null |
用invoke
就能很简单:
1 | val nullVal: (() -> Unit)? = null |
好,当我们如果要用一个对象的实例来当成函数一样使用的话那么该怎么做了?
这就跟上面说的的invoke
有关了,通过使用operator
关键字,来修饰invoke
方法,那么这个对象的实例就能够被当成函数一样调用了:
1 | data class Person(val name: String, val age: Int) { |
这,就是我们最简单的DSL了。
下面进入正题。