kotlin小知识系列1-dsl和invoke约定
kotlin小知识系列是连载文,会不定期的进行更新
invoke约定
kotlin中,为了更加方便的支持dsl,提供了一个特殊的函数,invoke约定函数。看下代码说明它的作用。
通过代码可以看出invoke约定函数,就是为对象提供了一个直接调用方法的途径。当然了,除了上述类似dsl的调用途径外,invoke本身也是个普通方法。也可以对其进行参数设置。例如:
两个例子可是说是比较常用的例子了~
dsl领域专用语言
kotlin本身语言的特性,天生支持dsl。主要用涉及扩展函数、lambda、中缀调用、invoke 约定和函数小括号省略等几个特性。 android的编译环境gradle就是典型的dsl的应用。只是目前gradle使用的是grovvy语言,下面我用kotlin实现一个说明的例子。
下面,我着重分析下几个要点
kotlin的lamada表达式
Dependencies 的约定invoke函数的参数是一个带有接收者的lambda表达式,同时由于invoke函数唯一参数是个lambda表达式,可以省略小括号。 所谓带有接收者的lambda表达式,我觉得更像一个闭包环境,而环境的context就是lambda的调用者,如果没有显示的指明调用者的话,就是当前的对象this了。
再看一个显示指明lambda调用者的情况
代码很简单,就不仔细说明了~~
领取专属 10元无门槛券
私享最新 技术干货