funtrick() {println("trick!!!")}funmain() {// 关键:手动重新输入这行,= 前后加两个冒号,避免编辑器解析偏差val funtrick = ::tricktrick()funtrick()}

var trick= {println("trick!!!")}funmain() {// 正确函数引用:赋值不加()val funtrick = trick// 直接调用原函数trick()// 通过引用变量调用函数:加()funtrick()}
区别其实就是使用 lambda 表达式重写 trick() 函数,则引用的时候就是变量,就无须加两个冒号了。
我们直接看带输入值的吧:

看例子:
var trick:(String)->Unit ={text ->println("trick!!!")println(text)}funmain() {// 正确函数引用:赋值不加()val funtrick = trick// 直接调用原函数trick("1")// 通过引用变量调用函数:加()funtrick("2")}
或者官方例子:



代码如下:
var trick:(String)->Unit ={text ->println("trick!!!")println(text)}funtruckFun(extrick:(String)->Unit){extrick("从truckFun内部调用")}funmain() {// 正确函数引用:赋值不加()val funtrick = trick// 直接调用原函数trick("1")// 通过引用变量调用函数:加()funtrick("2")truckFun(trick)}

truckFun(trick)truckFun { text -> trick("2") }

class Cookie(val name: String,val softBaked: Boolean,val hasFilling: Boolean,val price: Double)val cookies = listOf(Cookie(name = "Chocolate Chip",softBaked = false,hasFilling = false,price = 1.69),Cookie(name = "Banana Walnut",softBaked = true,hasFilling = false,price = 1.49),Cookie(name = "Vanilla Creme",softBaked = false,hasFilling = true,price = 1.59),Cookie(name = "Chocolate Peanut Butter",softBaked = false,hasFilling = true,price = 1.49),Cookie(name = "Snickerdoodle",softBaked = true,hasFilling = false,price = 1.39),Cookie(name = "Blueberry Tart",softBaked = true,hasFilling = true,price = 1.79),Cookie(name = "Sugar and Sprinkles",softBaked = false,hasFilling = false,price = 1.39))






softBaked属性是否等于true。
println("------------------------")val groupedMenu = cookies.groupBy { it.softBaked }val softBakedMenu = groupedMenu[true] ?: listOf()val crunchyMenu = groupedMenu[false] ?: listOf()println("Soft cookies:")softBakedMenu.forEach {println("${it.name} - $${it.price}")}println("Crunchy cookies:")crunchyMenu.forEach {println("${it.name} - $${it.price}")}
println("------------------------")val totalPrice = cookies.fold(0.0) {//传入 0.0 作为初始值total, // total累加器cookie -> total + cookie.price //计算 total 和 cookie.price 的总和.系统会将其推断为返回值,并会在下次调用 lambda 时为 total 传入此值。}println("Total price: $${totalPrice}")


println("------------------------")val alphabeticalMenu = cookies.sortedBy {it.name}println("Alphabetical menu:")alphabeticalMenu.forEach {println(it.name)//饼干名称会按字母顺序输出。