00:01
我们已经了解了scla当中的影视转换机制,那接下来我们就在代码当中具体的做一个测试,首先还是创建一个scla object,当前还是放在这个包下边,我们叫TEST02影视转换in isit方法,那我们这里知道要做的这个测试呢?影视转换的机制主要有这么几类,那有影视函数,还有影视参数,还有影视类。这里边首先我们先举一个最简单的例子,那就是比方说我想要对于一个整数调用一个我自己定义的。整数能够做的一个操作,一个方法,比方说我希望啊,直接重新来一个整数十二,我想调一个,比方说自己定义的一个my max方法跟另外一个数值五去做一个比较大小,返回它们俩之间。
01:05
大的那个数,诶,能不能直接实现这个功能呢?这里边我们就会考虑了,我可以自定义个类,我们定义一个MY,就借鉴了reach in的这种实现方法,道句里面传一个参数进来,叫做self,一个int类型,我试图要把这个int类型转换成一个my reach int,然后呢,MY里边可以调用我们定义好的自定义比较大小的方法,也就是my max以及MY命的方法,My max非常简单,我们传入一个数据N,那么。返回的当然就是他们两者之间的最大值了,F和N之间的最大值,那这就是if,当前的N如果小于self的话,大值那当然是要返回self false的话返回N,那同样我们可以定义一个最小值my me样是如果N小于self的话,这里返回的是小的返回N或四返回self。
02:32
定义非常的简单,定义完了之后呢,也不可能。12直接转换成my int啊,哎,我们知道当前的这种定义是针对自定义的my int的对象才有效的啊,我们可以调对应的my max方法,但这里的12它明显是一个int类型啊,Int类型的对象,Int类型的对象明显是没有my max方法的,这里自然是通不过变异的,我们知道如果想要一步转换的话,那么我们在这里可以有比方说我们去一个第一个,呃,把这个叫做NEW12,那么是基于我当前的这个12去new一个my reaching这个得到。
03:22
接下来62你就可以调这个方法了啊,但是我们现在呢,不想这么去做,因为你要这样的话,这个就不通用啊,以后我不能随时的拿一个整数直接就掉这个方法,必须得有一个整数来了,我都得重新创建一下,创建一个marriage int,然后才能掉,对吧?嗯,下下一个来了一个13,我同样还得做这样的一个转换才能去调my max方法,有没有一个直接默认就把所有的整数都转换成my reach in的一个方法呢?哎,是可以有的,这就是我们要定义一个影式转换的函数,所以首先第一步我们要做的就是影质换函数,影式函数,影式函数的定义就是一个一般的函数,前面加了一个implicit的一个关键字是它是隐式定义的,我们把这个叫做convert,传入的值当然就是number,一个in,返回的值呢,I reach,这里边要做的工作当然就是直接又一个my reach啊,传入的number转换成my reach就可以了,或者做我们。
04:40
把这个操作直接提炼成一个通用的操作,那这个通用的操作呢,在如果我们当前这一个表达啊,Inline想要直接调12点my max15,然后调这个的时候,如果通不过编译,那就自动会在当前的。
05:01
作用域范围内去找能够让它做自动转换的隐式函数,那这就是一个自动转换,把int转换成my reach int吧,那大家可能会想,这里为什么它就还是通不过变异呢?诶,那是因为我们这里的影式影视函数已经定义在它后边了,那当然它的作用域里边找不到啊,所以我们需要把它到前面来,那么在这直接调用完全没有问题了,我们可以直接运行一下,看看得到的结果,我们看更大的数都是15,哎,这样就没有问题了啊,我们可以做一个分界线。呃,当然了,另外还有一类是影视类,这个我们说是scla2.10之后才引入的一个新特性,它可以认为是影式函数的一个扩展,什么意思呢?那你像我们要定义这个自定义的一个类,然后我们要转换的时候要。
06:04
通用的啊,每一个int都要转换成一个marriage int的话,呃,我们要专门定义这样的一个影视函数,那我们就想到了,何必这么麻烦呢?我干脆直接把这个类直接定义成可以,我这里边的构造器参数不就是一个in特类型吗?我把它的构造方法直接定义成一个隐式的函数,影视的方法不就相当于实现了我们这样一个功能吗?哎,那能不能这么定义呢?呃,其实是可以的,就是直接把当前的这个自定义类定义成place。但如果我们直接在这儿写的话,你会发现它会报错,因为GA当中要求implicit修饰的影视的类,只能它不能放在最顶级的这个啊,当前这个空间里边啊,不能是最顶级的对象,只能把它放在当前某一个对象或者类的内部,所以如果把它放在这个object里边是生效的,但如果说放在外边就不对了啊,那所以比方说我们这里边可以定义一个影视类,我把这个直接copy一下。
07:13
我们在这儿可以用一个implicitlicit关键字这个类做一个声明,比方说我这里边直接来一个my reach2,那这里边我们哦,My max2和MY m2,把这个定义出来之后,我们现在如果要是直接print line。哦,My max2的话,大家看到这个就顺理成章。直接就可以调用,一点问题都没有啊,那当然我们也可以直接输出一个MY命二啊,呃,那最后输出的就是他们俩之间的更小的那个,我们看输出的是12,这就是关于影式函数和影视类的用法。
我来说两句