放开那本字典:匿名函式 anonymous function

唯心又看了诗忆之前写的几个高阶函式练习。「嗯⋯⋯我觉得你与其说是对高阶函式不熟,不如说是对匿名函式不熟唷。就算不指定string: String ->,在函式只有一个参数的情形下,可以直接用it;但是多个参数就要一一指名道姓罗。」

fun main() {
    meowPrint(printer = { println(it) })
}

fun meowPrint(string: String = "Hello World", printer: (String)-> Unit) {
    printer(string)
    printer("meow~")
}

她继续说:「而且,当函式参数排在参数尾端的情形下,函式可以拉出括号之外。如果其他参数都打算使用预设值,那就连括号都可以直接拿掉。」

fun main() {
    meowPrint("Haha") { println(it) }
    meowPrint{ println(it) }
}

「如果参数就只有一个,且那个参数就是函式参数也符合这个条件吗?」诗忆提出一个比较极端的例子。

唯心笑了笑:「那和第二个例子一样,因为没有传入其他参数,括号可以整个拿掉。」她想了想,决定趁此让诗忆学会各种写法。「还有啊,函式除了当作参数传入以外,也能当作回传值唷。比如我们把各种会带语助词的话独立成一个函式,然後再把函式回传存成变数来呼叫。」

fun main() {
    val 喵君说 = 说("喵")
    val 汪君说 = 说("汪")
    喵君说("早安")
    喵君说("午安")
    汪君说("晚安")
}

fun 说(语尾词: String) : (String)-> Unit {
    return { println("${it} ${语尾词}~") }
}
早安 喵~
午安 喵~
晚安 汪~

「如果写成表达式的话,还可以省去宣告回传的型别。」唯心补充说。

fun 说(语尾词: String) = {
    it: String -> 
    println("${it} ${语尾词}~") 
}

<<:  D14 - 彭彭的课程# Python 函式参数详解:参数预设值、名称对应、任意长度参数(1)

>>:  学习历程救援事件(灾难复原实例) - 有的没的瓜

Leetcode 挑战 Day 01 [前言与 1. Two Sum]

前言 我是一位程序设计的初学者,对程序设计非常有兴趣,希望在这个系列的Leetcode挑战中能提升自...

[LeetCode30] Day29 - 432. All O`one Data Structure

题目 实现一个资料结构,能支持下面4个操作: 执行每个操作,时间复杂度都要求为 O(1) Inc(s...

Docker云端:WebDAV+NextCloud完整云端储存环境

隔了几天忙一下...(最近真的忙爆,谁叫我是鸟事处理大师呢...? (自我膨胀?) 第三十一篇!! ...

C# Lambda

Lambda expression 於 C# 3.0 开始提供, 可以使用 lambda 运算式来建...

[Vue]ElementUI组件模板之自动完成el-autocomplete

1.原本的input 改为 el-autocomplete 并加上 :fetch-suggestio...