00:00
我们已经基本上知道函数到底应该怎么用了,那接下来呢,我们在针对函数参数的一些特别的用法给大家展开来做一些讲解,那这里主要涉及到的就是我们可以定义可变参数,而什么叫可变参数呢?啊,其实就是说当前参数的个数可以不确定,哎,我们可以有多个哎,或者说有有不确定个参数传入啊,这个时候我们可以使用可变参数,那另外还有就是呃,可变参数一般如果有多个参数的时候,可变参数是要放在最后的,然后另外呢,在scale拉里边还可以定义参数的默认值,哎,这个是比较有特色的可变参数,其实在Java里面也有啊,那SKY里面可能只是它的这个定义语法不一样,而参数的默认值呢?啊,这个就比较有趣了,它是指的是如果我们当前的函数声明的时候指定了默认值的话,那么接下来调用的时候呢,可以不。
01:00
传这个参数,不传参数的时候,这个参数的值就是默认值。啊,然后另外还有一个比较有特色的参数定义,就是代名参数,所谓的代名参数呢,就是说我们在指定这个参数值传值的时候,可以带着它的名称去传,这样的话就跟我们调用方法的时候,调用函数的时候参数的位置无关了,根据它的名称可以唯一确定当前就是这个参数要负这个值。啊,具体的话,我们还是在代码里边做一个测试,大家来看一看到底是怎么回事。首先我们还是先去new一个scla的object s03,接下来我们这个是要测试function对应的参数啊,Ater把它定义出来没方法,首先还是把这几个先copy过来。复制掉,然后我们把它格式化一下。
02:04
首先是可变参数,那大家其实知道啊,Java里边是有可变参数的这种实现的,把里边可变参数呢,就是参数后面三个点点点点底层其实就是用了一个数组来做了一个接收,对吧?啊,那在SKY里面其实也是类似的啊,Skyla里面呢,参数不是用点点点来表示,它是可变参数,而是用了一个星号啊,那所以这里边我们定义的时候就直接这样去定义,比方说F1,如果这里边我们给的这个string作为一个参数啊,S tr string如果可以有多个的话,那就直接在后面加一个星号就可以了。啊,那后面比方说我们不需要有返回值,定义一个unit返回值类型,接下来呢,直接把这一个G做一个打印好,那可以看到,如果说这个时候啊,F1我们直接输入一个爱丽丝的话,就是可以直接输出的,肯定没有问题,另外F1如果要是输入两个AABB,这也是可合法的,另外就是如果输出输入更多CCCC也是可以的。
03:17
大家可能会想到给我直接打印这个string,呃,Str,那这个str到底是谁呢?他是AA还是bbb还是CCC呢?哎,大家要注意啊,这里string的类型就是str的类型,其实已经不是一个简单的string了,而是什么呢?而是一个集合类型,也就是类似Java里边的一个数组来做了一个接收,我们可以直接把它打印出来,看一下当前的这个str到底是什么,大家可以看到str是一个rap a RA啊,就是包装起来之后的一个数组,对吧?啊,所以它底层其实类似于抓va啊,还是一个数组的接收,接收这样的一个可变的参数,而这里边的这个rap array呢,是skyla的一个抽象的集合类型。
04:06
啊,这就是这样的一个实现,那接下来第二个点就是如果参数列表里边我们有多个参数的话,那么可变参数一般是要放在最后,哎,这是什么意思呢?啊,其实非常简单,我们还是把这个直接实现一下F2,比方说如果我们有多个参数的话,哎,大家可能想到前边我这里边可能有一个STR1,它是一个string,然后后面又有一个STR2,然后它是一个可变参数,说多个。B可以接收多个参数进来,那大家会想到我能不能把前面这个运一来一个这个可变呢?哎,这当然不能,对吧?啊,因为前面这个如果可变了的话,那即使后边这个不是可变,那这里边就有一个问题了,你哪个才是STRING2呢?因为你前面可变呀,我可以把后边所有参数都归到STRING1这个集合里边啊,所以这样我就不知道了,所以要定义可变参数的时候,前边必须是确定的,按照位置我可以指定出来到底哪个是STRING1,而后边的参数呢?最后可以有一个可变参数啊,就是一个定义的规则啊啊,那所以这里我们定义的时候也是能说我可以定义。
05:25
TR。它的值,那我就加上STR1,然后后面我再加上STR2,就加上STR2,那这个时候我们同样也是可以做一些基本的调用,比方说用负二传Alice,然后传aabbb cccc,哎,大家可以看到就是如果只传Alice的话,那这个STRING2不就没东西了吗?
06:04
这可以吗?诶,当然是可以的啊。我们直接运行一下可以看看。大家看到,如果要是。哎,STRING2里边没有任何的参数的话,它也是有对应的值的,它的值就是一个空的rap RA空集合,哎,同样也是可以有对应的这个参数,那同样如果要是a ABB cccc的话,那就是AAA,这是s tre1后面的BBBCCCC放在一个集合里边,这个集合叫做STR2。非常简单的一个使用,这是关于可变参数,然后后边呢,还有两种比较有趣的用法,一个是参数的默认值,这个使用的过程当中又是怎么样去定义呢?哎,那简单来讲,我们还是把这个copy下来啊,稍微做一个更改,一个F3这里的string我们干脆就定义成一个name吧,Name就不要可变了啊,哎,我们直接就给一个string类型的一个name,然后这个name呢,我们可以直接。
07:08
看后面直接加一个等号,然后直接给一个符串的值,就表示对于这一个参数指定了一个默认值,假如调用的时候可以不传这个参数,不传的话,那当前的值啊,就是对应的这个值对吧?比方说我们把这个比成at硅谷,那下面打印的时候。每说出一句话。我的学校对吧,My school is。然后后面加上当前的,那就是放了一个调用,我们看一下这个调用的时候它会怎么样传参啊,首先最简单的方式啊,那当然是应该一个定的这一个串对吧?啊,比方说我这里边啊,我们随便写一个school对吧,当然是合法的,那另外呢,F3直接不传参直接掉。
08:09
也是合法的,因为我当前这个参数已经有了默认值了,那所以这里不传的话,当然显示的就应该是默认值,哎,我们可以看一下运行一下。大家看到前面这一次调用那是传进来的school取代了这里的name,而后边这一调用呢,哎,那就是用了默认值,所以这个使用也是非常的方便啊,在有些场景里边,我们可能就不需要再单独去对它做其他的一些设置了,然后另外呢,还有一个是名参数啊,这个代名参数又是什么意思呢?这边我们定义一个F4,我们定义两个参数,首先给一个M的句,然后啊,另外我们给一个age。这里我们不需要返回值,直接给一个unit类型里边可能我们直接啊输出,那我们还是做一个这个插模板字符串啊,字符串模板一个差值po配吧更多。
09:14
对的,加上那谁,哎正规股学习啊,那这里边大家会发现啊,本身如果要是这样定义的话,那没什么问题,我们这里边直接调用的时候,那就应该是F4方说我们这里边给一个爱丽丝。后边给一个十是完全没有问题的,那大家可能会想到,假如说我现在想要先就是打乱这些顺序,直接先给这个A准赋值可以吗?哎,这个其实是可以的,他们说这里边可以直接F4接,那有同学说那你直接给一个23,然后Bob这肯定不对啊啊,因为我们这里调用的时候,肯定是按照这个参数的顺序来一个一个赋值的吧,那这里怎么样就可以让它变得正确呢?加上它的参数名称写法就是A等于13,后边内内内等于。
10:23
这就对了。好啊,那所以大家看到就是这种用法的话,这就使得我们的参数如果很多的时候,我们可以就打乱顺序,就不需要那么关心啊,他当前到到底是怎么样了,那当然了,如果说你当前的所有参数都需要赋值的话,可能还是按照顺序更加简单一点,对吧?哎,那在有些场景下,什么情况下用这个用的更加的呃,就是更加看起来更加方便,更加有用呢?那就是在有默认值的情况下,比方说当前的这个age啊age的话,呃,因为它是后面一个啊,我们直接给这个name吧,比方说name,我这里边直接给一个所硅谷是默认值。
11:07
那大家就会想到了,我接下来是不是可以直接不给name的值,直接给一个H就够了呀,哎,但是有同学可能想到了,那你现在直接F4直接给一个H,这是可以的吗?不对呀,按照顺序不是第一个必须得是得是string啊啊,他并不知道你现在要要给谁赋值啊,我只能按照顺序一个一个来,那这个时候怎么办呢?那我就直接H等于21也就可以了。好,所以接下来我们看一下。运行的结果,大家就会看到第一句这个没有问题,20岁的爱丽丝在上硅谷学习,然后后面这一句呢,23岁的Bob在上硅谷学习,对吧?呃,打乱顺序,这也是对的,那最后一句大家看21岁的艾特硅谷在上硅谷学习,这其实用的是我们这里的默认值,而且呢,啊,就是带着。
12:03
名称给参数赋值的时候,那后边我们这里边就也不需要依赖它的顺序了啊,对吧,单独给A赋值,剩下的我们直接用默认值就可以了,哎,这就是在有一些项目里边啊,我们写代码的过程当中,这个会非常非常的方便,可能有很多参数大部分都有默认值,我只要对应的给一个或者几个。没有默认值的参数去赋值就可以了啊,这是关于函数参数的一些特殊的用法。
我来说两句