一、关于匿名函数的一些问题
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)