00:00
下面呢,我们来继续看下面的内容啊,那高阶函数,呃,前面讲的这些东西呢,我们再做一个简单的小结和回顾,呃,就以刚才那个minus X y作为一个说明,函数名是它该函数返回的是一个匿名函数,是这个这个样子的,那么这个返回这个这个对它的说明马X执行过后呢,它得到的就是这么一个匿名函数,准确的讲,连这个X呢,都已经被替换掉了,哎,你可以这样去理解,然后呢,三五执行的话呢,呃,就是相当于执行这个匿名函数,对吧?啊也可以分布执行,这是简单的一个小结,我们就说到这,下边我们继续来看一个案例,这个案例呢,我找一个同学说一下它的结果是什么就可以了。同学们看这个结果是是多少呀?十。12啊12啊,好very good 12就正正正确的啊,12就是正确的,那么重点就是要去说一下这个2.0其实被绑到了这个点上,对吧,就你不是说哎,这个X写两次,其实你这返回来的这一个,呃,匿名函数相当于是一个4.0乘以Y是吧?诶那就可以了,就把这个理解一下就行了,好,那么高级函数我们就说到这里,下面我们来看类型推断,类型推断很简单,但是特别有意思。
01:31
很多你看不懂的代码,你学完这个过后,你突然下线发现,哦,原来看懂了。什么叫类型推断呢?或者或者叫参数推断呢?简单的讲就是这个意思,参数推断省去了类型的信息,在某些情况下需要有应用场景,即你这个类型推断是有一个前提的。你的类型推断是有一个前提的,什么前提呢?就是你得有一个具体的场景,它才能够成功的进行类型推断,没有离开这个场景,你可能这个代码就错了。
02:06
哎,你看这个场景你就错了,因为我们编译器呢,本身它也会适应上下文的一个推断,那么参数类型呢,是可以推断出来的,比如说list,我写了一个list。啊,这个L应该是大写,L可以小写,无所谓,这个list呢是123,我们在进行list.map的时候,这个map。中的函数的参数类型是可以推断出来的,什么意思呢?就是说你在这个map里面,你会写一个函数,比如说F1,那么这个F1呢,如果他要去接收一个类型。这个类型他知道你就是int,明白意思吧,就因为你前面这个list的呢,是一个整数的,所以说这个你传进去的这个F1呢,它接收参数必须也是硬的才能匹配。它就会自动的进行推断,你不需要特别的说明是什么,那么具有这个特性就意味着将来我们传入参数呢,那个类型的名称是可以去掉的。
03:04
好,那么接着看,同时也可以进行相应的简写,那么我现在呢,快速的再做一个说明,我们再举个例子一下就明白了啊同学们请看现在类型推断,现在类型推断。说一下这个类型推断的它的三点,第一点参数类型是可以推断的,可以省略参数类型就是你的这个in特呀,W可以不写了。第二个,当传入的函数只有单个参数时,就说你这个参数只有一个,你可以损去括号,如果是多个,不能损确。第第三个,如果变量,变量在这个箭头右边只出现一次,可以用下滑线替代,那基于这样三个原则呢?我们直接看案例。来直接看案例啊,各位同学。我写一个标题叫做。
04:03
啊,拍啊,Me meter,推断呢,一般这个单词可以写成infer啊,Infer就是暗示推断的意思啊,我就写这么一个意思。好,同学们,来写一段代码,我直接给大家,给大家写一下啊,同学们,现在我一步一步的简写,我一步一步的简写,好,我把这个保留到这里,大家看我最终为什么简写成这个样子了。最普通的方法,大家看圆心,我我我问大家这句话是,这句话表示什么意思?这句话是不是我要去传入一个函数,这个map原先是不是传一个函数进去,现在相当于这个函数我我直接写到这一方,能理解了吧,因为原先我们是写一个函数,把函数名传进去,现在我们直接把这个匿名函数传去,效果是一样的,他干一些什么事情呢?他把你这个历史里面的X拿到,然后对它加一,换言之就是对这个历史的面每一个元素怎么样加一,能理解了吧,好,这个应该返回出来,结果就是2345运行一下。
05:05
这个这个一定要看懂了,我这讲过了,你要看不懂那就是你的责任了啊,我们也讲了,你看不懂那是老师的问题,好这个东西呢,我们可以马上简写,简写是什么样的呢?因为你这个X这个map,它知道你是int,说说这个字就可以去掉了。简写成这个样子,它仍然是2345,好,这个又可以继续简写,为什么呢?因为你这边只有一个参数,所以说这两个括号。这个参数的括号可以去掉,还可以继续再简写,为什么呢?因为你X在这边只出现了一次,所以说这边可以写个下划线。最后代码就变成这个样子了。大家现在应该能看懂了吧。哦,原先哦,这以前如果说我们不把这个推断拿出来,直接告诉你麦下划线加一,你可能看不懂,现在应该知道,哦,原来是传了一个匿名函数,然后呢,做了一系列简写。
06:01
好,那我问大家一个问题啊,这个你们看懂了。看懂了过后呢,我问同学们,下面这句话表示什么意思?这句话表什么?那这句话什么意思?有人说乘以二怎么是乘以二,我明显写的加法呀,对吧?哎,我们来这样子啊,我们我们我们第一次看这个,你会觉得很奇怪,老师给你们一步一步推出来啊,我我先保留这个原子,我看是怎么推出来,我先写一个啊,最简原先我们最古老的方法这样写的,注意听我用最古老的方法写一下及其个F1是不是原先我要接收两个整形是这样子是吧?啊。啊,不着急,我们把最古老的写法,最原始的写法,它其实是这样写的。我们看看一步一步怎么解析出来的,那这边是N1加N2,看清楚了吗?啊好,然后我们,呃,我们原先这个reduce就是这个radio是默认是radio left的是吧?好,那现在呢,我写一个代码啊,我就直接这样写,同学们因为时间关系,我就这样写点radio。
07:13
R videos直接把这个F一传进去,是不是这个效果就出来了,好然后呢,我们开始要简写,简写是什么呢?因为现在我们可以知道,可以直接传入一个匿名,匿名的函数,那匿名函数是不是就是把它的这一部分拿过来看懂了啊。把这部分拿过来,一个箭头,把它的这个代码拿过来,是这意思吧,同学们。这个现在看看清楚是这个意思,能看懂了啊,这两个是完全等价的,现在我们根据刚才原则一步简化,因为它的类型是不是可以推断出来,因此你这个int可以拿掉。是不是等价的是等价的继续,因为你这个啊,你的这个N1和N2是不是在这边只出现了一次,所以说其实这个地方就可以全部拿掉,然后这边写上下划线和下划线。
08:06
因为你只出现了一次嘛,这个代码就出来了。啊,大家看懂了吗?就是一步一步这样来的啊,这个我们一执行,那么每个地方输出的都应该是它的这个二倍啊,就是加上加,哎啊不,这个不是加上二倍的意思啊,这个应该是最后把它整个这个加起来,一个值应该等于多少?这个是等于多少?十,是不是下面都是十啊?哎,同学们,这个要看懂,十下面这个也是十,下面这个仍然是十。好,我们执行一下,我们执行一下看效果。好,当我执行完毕过后呢,这个代码就应该全是十。好代码出来了,这就是我们一个简写的一个效果,好同学们关于这个呢,我就给同学们关于我们参数类型推断,我们就讲到这儿,后面呢,还有一点点这个小结,我们说一下。
09:00
呃,Map是一个高阶函数,因此可以直接传入一个匿名函数完成map,当遍历历史的时候,参数类型是可以推断的,可以省略掉int。啊,除掉变成它了,当传入的参数只有单个参数时,可以去掉小括号,当我们的变量在左边右边只出现一次时,下划线替代就这样一步一步推导出来的。好,以后大家再去看代码,要一下就能看懂啊,一下就能看懂好的,关于参数类型推断,我们就聊到这里。给大家进行一个简单的板书。好,刚才我们讲的是参数类型推断。这是我们的标题二。没问题。那我刚才讲了什么东西呢?诶首先说一下基本介绍啊,参数类型推断在我们开发中你会经常的看到。写到这里,然后呢,参数类型推断的这个原则啊,或者叫推断,推断写法的说明正确第一个。
10:04
啊,如果类型可以推断出来,那么可以省略掉它的类型。啊,穿入单个参数可以垂角求高,以此类推,那么我把代码写下来啊,我们这有个应用案例,给他拿过来。这个运案例还是比较有说服力的。把应用案例给大家阐述到这里。标题上没问题啊,大家应该能看到很清晰。一步一步怎么过来的?好,我把代码呢也给大家搬过来,代码就是这么一段代码。啊,这个代码应该写的更清晰一点,所以说把它呢,也给大家粘贴复制到我们的笔记中去。可以了。好,最后呢,这个小结我就不再多说了,小结已经说了很多遍,好,关于参数类型推断,我们就讲到这里。
我来说两句