Kotlin的一些问题

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

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值