00:00
我们知道了函数可以作为值进行传递,也可以作为函数的参数进行传递,那接下来我们再来说最后一个用法,就是函数可以作为函数啊,返回值返回,哎,所以整体来讲也是非常简单啊,我们就想到了只要是值类型能够应用的地方,函数,因为它是可以作为一个表达式嘛,它有返回值,所以只要是值类型能用到的地方,不管是变量赋值还是参数值,还是返回值,都可以用函数来替代啊。那所以接下来我们看一看函数作为函数的返回值到底又是怎么样来应用呢?哎,这个时候大家注意,这就出现了所谓的函数嵌套了,为什么呢?因为我们在内层能要定义一个F啊,因为我们是定义到了F3F4,那接下来我们定义一个F5。
01:00
外层我们定义一个F5,我先不写它的类型,可能会想到啊,这个F5我其实是要返回一个,返回一个函数的,哎,所以接下来这个函数我们到底怎么定义呢?那就在里边再定义一个F6,那层我再定义一个函数,那最后是不是我要把F5里边,我把这个六定好的,F6返回就是我们想要的这个东西了啊,那所以接下来F6我定义成什么呢?啊,比方说我定义一个目前有一个参数int类型的参数,然后呢?啊,没有返回值是一个unit。那里边当简单,我这里边直接print line f6调用,然后后面我们加上当前注入这个A的值,所以大家看接下来如果F5要直接返回一个负六的话,那大家可能知道我们正常肯定是return f6嘛,哎,GALA里边return可以省略,所以我直接把F6写在这,如果直接这么写的话,呃,大家知道这个本身这应该是要做这个函数调用的那种写法,如果我们要明确当前本身它就是一个一个函数要返回的话,那我是不是可以空一格加下划线呀,或者。
02:24
大家应该还记得,我如果在外层直接把对应的函数类型定义出来的话,那这里面其实不加下划线也是对的,对吧?哎,那当前的这个类型应该是什么呢?里边要返回的其实是F6,是一个int类型的参数作为输入,然后返回一个unit类型作为返回值输出的这样的一个函数,哎,所以大家看这个函数的定义,那就应该它的类型就是int到unit。就是我们说函数式编程里边关心的是映射关系嘛,啊,这函数的类型也是一个映射关系啊,Int到unit这样的话,下面这个F6就可以明确这是F6这个函数本身。所以我们是当。
03:11
函数直接返回也并不是函数调用的值啊,所以接下来我们来看一下这个F5,如果要做使用的话,那应该怎么使用呢?哎,其实这个大家就会发现,F5如果我直接在这里,它本身没有参数啊,如果F5直接这里边做一次调用,那得到的应该是什么呢?我们可以直接print line一下F5。他会发现得到的是一个一个引用,那所以这里边F5为什么会得到引用呢?啊,因为这里它返回的值是一个函数啊,所以我们前面不是说函数本身底层也是一个对象吗?哎,所以这里边当然得到就是一个函数的对象啊,嗯,当然就是一个引用了,所以如果说我们想要真正的得到一个最后啊,真正调用的那个结果的话,那是不是还得把这个函数再做一次调用了。
04:13
哎,所以这里边这个F5啊,得到的其实是什么呢?其实是F6。就是比方说我们在外部再去定义一个F6等于F5调用的结果的话,那这里边我们打印F6,那就是这个结果了,哎,那所以我们如果要想要真正的调用F6的话,那应该还要再给他一个参数,把A传进来,比方说给一个25,那就可以得到结果了。运行下那会看到。F6调用25,然后得到的是一个空。返回是一个unit类型的一个空括号,那为什么得到了这个呢?因为F625调用的最终结果,这不本身是一个unit类型吗?啊,那当然这里边直接打印就是一个空括号了啊,所以整体来讲啊,前面的这这些步骤其实都可以,如果我们不是想要到这个最终F5返回的那个函数F6的话,那我可以直接这个F6这一步操作直接省略掉,直接F5先来一个括号,得到它要返回的这个F6这个内层的函数,然后呢,直接给后面横参不就完了吗?
05:29
哎,所以大家看就是前面的这一步啊,我可以直接省略掉。直接在这里F5括号,然后再再次调用。25这这就可以达到同样的调用F6的结果,大家看到F6调用,然后25输出,最终返回的值是一个空。这就是关于把函数作为函数返回值的一个应用。
我来说两句