00:00
接下来我们介绍一个比较特殊的概念,那就是scla当中的自身类型啊,Scla当中是有一个叫做自身类型,也就是self type这样的一个东西的,那它说的是什么呢?简单来说自身类型吧,它就是表示一个类或者一个特征,它本身是属于一个什么东西,就是它本身的本质是一个什么样的类型,那所以大家从这个概念看的话,这就有点像继承的一个关系一样啊,我们说继承关系不就是代表它的一个本质的提炼吗?啊,所以如果一个类或者特征指明了self type自身类型的话,那就相当于接下来它的子类或者是对象。就会拥有这个类型,指定的这个类型里边的所有属性和方法,所以大家看这个效果上看的话,就跟类的继承或者是特征的mix in混入是差不多的,那具体它的语法呢,其实就是当前有一个别名,然后后面加一个冒号。
01:07
后边给一个当前的类型,这个类型一般就是类或者一个特征,一个treat,表示类似于继承的一个关系,然后后面加一个之前我们类似拉姆达表达式的那个向右的箭头,哎,这是一个标准的声明自身类型的语法,那前面别的呢,基本上就是关键在于这个类型大家要指定了,前面的这个下划线,它只是一个。别名的通配符而已,就这里我们不写下划线,随便给一个别名其实也是可以的,当前这个别名呢,就是只带,其实就是只带当前自身,它其实就是this的一个别名啊,所以看起来这个语法有点诡异啊,那它实现的效果是什么呢?接下来我们在代码里边给大家测试一下,看看它能够干什么事情。接下来我们还是代码当中去新建一个scalela的object test直六,然后接下来我们这个就叫做trade的自身类型self type配方法,然后接下来我们就要定义对应的类和特征了啊,我们现在呢,就要举一个相对来讲比较实际的例子,比方说我们搭建网站的时候,可能需要有这个用户,然后呢,啊,用户有这个注册登录啊,各种各样的行为啊,那这里边我们比方说就定义一个用户类吧,我们只是做一个事例,所以说会定义的非常的简单,User,我们直接在它的主构造器里边把对应的参数传入,映出它的属性啊,我们这里边定义一个nameme username啊,Re啊,那另外还应该有一个password,如果要注册。
02:58
要去登录的话,那最重要的其实就是username和password啊,然后后面的类题可以写画括号就省略掉了,然后接下来呢,对应的user可以有各种各样的操作,那大家知道这个操作可能最后是要去直接啊去做这个数据库的操作的,那这个我们一般就把它包装成一个一个洞,对吧?啊,比方说我们定义一个user洞在这里的话,我们单起见,不去直接连接数据库做具体的操作,我们就比方说您一句话啊,知道干了什么事就完了,那这里。
03:34
比方说我们定义一个往数据库里面插一条数据,比方说我们想要去注册嘛,想要注册这个用户的话,就需要向数据库插入数据,那么这里我们可能要定义一个insert这样的一个方法,Insert方法的话,呃,我们简单起见,就不做任何的操作,只是打印一句话,不是我们做了这件事,Insert into,比方说DB啊,然后加上。
04:08
那里边可能我们会加上一个当前user的name,那大家会想到,那当前这个user的name到底是什么呢?而且我们其实也知道啊,一旦要insert的话,你肯定得传进来当前对应的那个用户的username嘛,对吧,Username和对应的这个相关其他信息,甚至连这个password也得给过来,那当前你这个什么都没有,那怎么办呢?哎,我们这里边有一种非常简单的写法,可以直接定义一个自身类型来看,这样就是定义了一个自身类型。的意思。就是我把当前。当前的user do。它的自身类型定义成了user,也就是说我当前在做操作的时候,可以认为自己里边就有一个user,然后接下来就可以直接做了,那我们看看,既然是直接就有一个user,那接下来怎么办呢?我可以直接拿到对应的name吗?看,那这样是直接拿不到的,所以接下来我就得怎么样呢?用this.name来看到,这样就可以拿到了啊,所以接下来我们其实非常的简单,因为我们这是模板字符串,所以直接一个Dollar符放在这里就可以了。
05:32
哎,我们这里就把当前这个用户啊,直接定期点入到了数据库里面啊,这里边大家要注意的就是前面这个下划线,其实随便给一个什么样的别名都是可以的啊,或者你直接就叫this也是可以的啊,里边一般情况我们是用下划线,就是一个通配符,告诉不是我们之前是要做一个身类型的定义,这个就不会混淆,然后有了这个之后,我们自然就可以去定义一个子类了啊,那比方说我们现在定义的这个子类,呃,这就比较特殊了,我们定义可可能是一个操作啊,定义注册注册用户这样一个类,所以接下来我们可以pass,我们管这个叫register。
06:22
那里面我们就要传入string和当前的sword,那它应该要继承当前的user啊,那继承user的话,我们看到了啊,User本身的构造器,主构造器必须有这两个参数,所以我们继承的时候要写入name和password,然后接下来呢,我们可能如果创建这样一个呃,Register user的话,那就相当于我是想要直接比方说调一个方法,就把它直接写入到数据库里了,那要调这个方法的话,怎么样才能调呢?哎,我在这儿可以直接给它混入一个勾there do这样的特征,接下来我就可以直接调用这个英特尔方法,哎,所以大家看这个过程其实就是user到要使用user的里边的一些属性,那这个时候呢,我又不想让它们之间有继承的关系,那怎么办呢?
07:22
我可以直接指定一个自身类型,然后接下来就相当于在里边就拥有了一个user,就像在这儿外部直接插入了一个user对象一样,这种感觉啊,所以大家看这不就是我们所说的啊,就是当前要用到的这个对应的这个类的实例,我是从外部注入进来的吗?这就相当于实现了依赖注入的功能。啊,接下来我们可以做一个测试,我说当前我定义一个user啊,是new,用这个register user去做一个处理啊,我们还是定义这个S啊,Password这个随便给一个123456,然后接下来可以直接看,可以直接调user.insert啊,这个我们运行一下的话,那就会执行我们这里边定义好的,像数据库里边写入当前用户信息的这样的一个操作。
08:20
这就是自身类型的用法啊,当然自身类型不光可以用在treat里边,其实类里边也可以直接这么用啊,这是skyla比较有特色的一个用法。
我来说两句