Kotlin的一些问题

来源:互联网 发布:网络非法赌博 编辑:程序博客网 时间:2024/06/06 08:25

一、关于匿名函数的一些问题

1:inline fun String.testLambda(action:String.()->Unit)= action()2:inline fun String.testLambda2(action:Context.()->Unit)=action()3:inline fun String.testLambda3(action:()->Unit)=action()

针对String,扩展了三个函数,其中1,3可以通过,2无法通过。方法2需要传入一个content才能通过,如下

inline fun String.testLambda2(context: Context,action:Context.()->Unit)=action(context)

对三个方法执行测试

 "aaa".testLambda { error { this } } "aaa".testLambda2(this) { error { this } } "aaa".testLambda3{ error { this } } 输出 aaa com.xly.kotlinupdate.MainActivity@3d1bc137 com.xly.kotlinupdate.MainActivity@3d1bc137

结论:

1、xxx.()这个匿名函数需要在调用匿名函数时传入一个xxx对象
2、当扩展类型,和xxx一致的时候,可以直接省略
3、普通匿名函数相当于没有类型传入,所以不用传任何参数。
4、通过数据输出,可以看出在函数调用的时候可以通过this直接得到持有的xxx对象。

总结:这种方式,在anko的dsl中自定义view中有体现。

inline fun ViewManager.customizeView(theme: Int = 0, init: CustomizeView.() -> Unit) = ankoView({ CustomizeView(it) }, theme, init)
阅读全文
0 0
原创粉丝点击