kotlin 踩坑实录(一)之apply
来源:互联网 发布:淘宝推广员工资待遇 编辑:程序博客网 时间:2024/06/06 08:24
kotlin中的apply方法的作用是传入lambda表达式,并将lambda表达式中对apply调用对象进行修改,然后将修改后的对象进行返回。
今天尝试使用过程中,由于将“()”错写成“{}”,导致调用apply之后,对象的状态并没有发生改变,代码如下:
val action: StringBuilder.() -> Unit = { append("aa") }
println(StringBuilder().apply { action }) //action被大括号包裹
println(StringBuilder().apply(action)) //action被小括号包裹我们会调用后会发现结果,第一句打印内容为空,第二句打印的结果为“aa”
如果一定要使用大括号{}的话需要把第一句改为
println(StringBuilder().apply { action() }) //在action后面加入小括号
改成这样后就也可以正常打印“aa”了。
当然在以上的例子中最合理的写法应该是下面这样:
val action: StringBuilder.() -> StringBuilder = { append("aa") } // print(StringBuilder().action())
由于lambdab表达式定义了接收者,相当于在action的作用域内定义了该类的扩展函数一样,直接使用StringBuilder对象调用该函数即可。
在lambda表达式中,是不能写return的,如果说,我们需要action类型为StringBuilder.() -> Int该怎么办?
lambda表达是的最后一行会自动判断类型是否匹配于Int,所以最简单的改法(可能没有什么意义,只是为了展示语法)如下:
val action: StringBuilder.() -> Int = { append("aa") 1 //把1写在最后一行,当然任何返回值为Int的函数调用来替换都是合法的}
阅读全文
1 0
- kotlin 踩坑实录(一)之apply
- Kotlin 踩坑日记(一)Kotlin Dagger2 配置使用
- android使用kotlin开发基础(一)之 hello kotlin
- Android+Kotlin开发之Kotlin基础(一)
- Bug实录(一)
- Kotlin学习之路(一)
- Android之开始学习Kotlin(一)
- Kotlin之let,apply,with,run函数区别
- Kotlin之let,apply,with,run函数区别
- Kotlin之let,apply,with,run函数区别
- Kotlin之let,apply,with,run函数区别
- Kaldi安装实录(一)
- Kotlin入坑(一)学习资料
- Kotlin使用(一)
- 初试Kotlin(一)
- Kotlin使用(一)
- Kotlin语法(一)
- Kotlin Android(一)
- sklearn_PCA实践
- 笔记本电脑U盘安装win7和win10教程(本地试验成功)
- FairyGUI编辑器制作Unity3D UI值得借鉴
- android开发 之 Paint
- 13.3-全栈Java笔记:打飞机游戏实战项目|PaintThread|launchFrame
- kotlin 踩坑实录(一)之apply
- python命名规范-google-styleguid
- hdu--6052--To my boyfriend
- 浏览器标准模式和怪异模式之间的区别是什么?
- angular-cli(material.angular.io)
- 数据结构之高级排序<希尔排序、快速排序>
- MFC编辑框数据的读写
- 文章标题
- luogu1052 【2005提高】过河 (压缩状态)