00:01
好,我们开始书写咱们正式开发的第一行代码啊。这个大家应该呃能想到,就是这个script当中引用的这个帮豆点GS啊,实际上就是我们最后那个包要暴露的东西。啊,这一点要想清楚,所以说就相当于什么呢?就相当于你这里,比如说我们之前不是must touch吗?那我在这里换成上硅谷对吧,哎,然后template engine。啊,然后点render看见没有,那这样子一调的话,他肯定会报错呀。啊,为什么一报错,因为这个,呃,看这边刷新他肯定会报错啊,因为他说这个东西is not DeFined对吧,你没定义。那所以呢,你这样就要定义这个东西啊,那定义这个东西的话,咱们现在呢,只需要考虑在浏览器环境中。啊,就是浏览器的环境中,所以这个时候我们啊在这里就直接写window。
01:00
啊,那至于这个window还是最后的expert,其实不用关心这个啊,因为umd这个是一个头的问题啊,我们只要暴露这个对象。对吧,然后这个对象上头呢,又有render方法不就行了吗。这能理解吗?对吧,你暴露了window就是给全局诶写上了它。啊。啊,然后呢,全局有引导对象之后呢,它里头有render方法,那它这里不就不做不报错了吗?输出123之后,这里不就输出123了吗。所以这个编程的节奏感一定要好,一定多问几个为什么啊,比如说这个script到底是什么,这个script其实就是最后咱们打包打出来的啊,比如说到最后是咱们生成出来之后,它可能就叫D,然后叫上硅硅谷。对吧,哎,他们的n.GS没准到最后打包成这个啊,那这个是什么。这个就是一个全局变量啊,那为什么刚才我要说什么window道不window,什么umd模式啊,实际上同学们可能这方面有点懵啊,就是说我们开发出来的这个包到最后很有可能是被弄的这样子直接用的。
02:11
啊,Note GS很有可能就是,呃,直接就玩一个SSG对吧,哎,Template。啊,Template engine啊,然后呃,等于require,就是NPM上下载的这个。啊,当然咱们如果想发在NPM上,也可以给他发布到NPM上对吧。啊,那这个里头当然就没有window这个对象了啊,这个咱们最后再说就是到底什么是呃UD啊,我们在这里呢,就是简单的给它封装一个对象,然后暴露这个render啊,提供这个render方法就可以了。这个123就行了。啊,那这个时候的话,咱们想一想啊,这个H1咱们就可以删掉啊不要。干扰咱们,那咱们现在想一想它的目的是什么,对模板字符串和数据嘛,所以他肯定就要先来一个模板字符串,就是他们。
03:02
啊,所以这个思路是很好进的,非常好进。哎,然后咱们现在就写一个,叫我买了一个C,咱们不是一直在用这个例子吗?哎,好木的呀。哎,好心情啊。好,然后把它往里传,然后对数据我们就写一个。对吧,数据我们就写个空间项啊,Data我们就写个空间项往里传就行。啊,所以这个时候你就会发现就是很简单呀。啊,模板这是什么模板字符串,这个是什么数据对吧。那这两个参数就会到这儿吧。所以这个这就开始了啊,就第一脚就迈出去了,你会发现一旦你第一脚迈出去了,后边的东西呢,你就顺了啊,但是最重要的其实还是一个思路。啊啊,一个解决问题的一个大致的一个走向,这个是比较关键的。那这里的两个参数呢,是template和data啊,我们的行参也用这两个名字。
04:05
哎,就可以了啊,然后我们现在就可以写一下啊,比如说输出一个,或者咱们在这里。哎,输出一个叫他啊叫render函数对吧,哎被被调用。啊。想。在这里写一下原件函数被调用啊。OK,挺好。那这个时候的话,我们就需要开始进行第一个操作啊,第一个操作是什么呢?咱们之前其实一直在讲课,就是第一个操作就是如何把模板字符串编译为tokens。对吧,哎,就是如何将模板字符串这样的东西编译成这样的东西啊,这个就是咱们现在要说的,那么这个时候呢,我们就需要先去寻找。就是你得有一个机制能够寻找到这个大括号的位置。对吧,并且不但能寻找到呢,而且它能有一个机制,就是便利到账,你看。
05:01
对吧,就是它能够走便利到这儿,然后再走能便利到这儿,然后再走能便利到这儿。啊,就是它有一种就是像小指针一样啊,从第一个字符开始,一个一个探查。看看能不能找到这个模板。对吧,能不能找到这个。啊,能不能找到这个,呃,收纳括号,哎,然后继续往下走啊,一层一层不是一层一层找,就是一个字符一个字符的找。啊,那么这个找这个双大括号这个功能呢,其实在原版的main touch当中,咱们刚才那个案例不是有这个,就这个文件夹还记得吧,哎,之前的这个案例当中,这个massin touch不是它的原版吗?官方原版啊,咱们可以看一下它的官方原版当中呢,实际上是在用一个类,这个类叫scanner。啊,Scanner这个类。哎,叫扫描器,诶,它是用这个扫描器这个类啊来去实现的这个扫描文字的这个功能啊scanner那这里提供了两个方法,Scanner啊,一个叫做SC啊,一个呢叫做SC啊。
06:06
哎,那他俩到底是干嘛的呢?咱们一会儿啊老师啊,咱们不看他的源代码怎么写的啊,咱们不看他源代码怎么写,因为。你们有老师在,就如他他不是你们,嗯,如果你们是自学自己,比如说想去盘他的逻辑啊,那你可以看,但是现在呢,有老师在,老师会认为如果现在带你去扒拉这源代码的话,很有可能你会懵,所以我们不去看这么多源代码,但是呢,我们就告诉你,他有一个scanner这个类,所以我们也要去创造这个类,很简单,不要怕,特别简单。那咱们现在呢,就开始干嘛,Runner函数被调用,那么我们现在要干嘛呀?是不是我我们要命令咱们这个scanner工作,明白吗?Scanner工作。啊,Scanner要去工作。那scanner怎么工作呢?那咱们现在就要开始研究研究这个scanner类啊,首先我们要新建一个scanner叫扫描器。
07:02
这个类叫扫描器啊,咱们可以写个备注。哎,叫扫描器类。对吧,扫描器的类啊,那这个时候我们就可以default啊,默认暴露一个类。啊,咱们直接写ES6,它原版写的是ES5啊,咱们这里写S6就行,那这个类的名字呢,就叫scanner。好,然后这里有一个构造函数啊,ES61定要会,咱们一开始呃。课上的时候。对吧。哎,我是,呃,就是课前咱们说了。啊,这是一个必要的,就是ES6是大家必要的啊好,那这个时候我们这个JS文件它就可以去引包啊,这个引包不要在这HTML引啊,因为HTML引不到这。哎,这里需要打包啊。对吧,所以就引包引这个scanner。好引进来,那这里呢,就可以拗啊,把它拧出来。
08:04
那这个scanner收一个参数,就是你的模板字符串。哎,也就是说我们现在要去实例化一个扫描器。啊,那么构造时候呢,去提供一个参数,这个参数呢,就是模板字符串。那也就是说什么呢?也就是说这个扫描器就是。对吧,诶针对这个模板字符串。服务的工作的。对吧,哎,就是针对这个模板字符串来工作的,是这样子的。啊,所以说这个就是相当于全局提供SG templ的这样的一个对象,它有一个render方法啊,这是渲染方法。这里。哎,那所以说这个构造器,它这是不是就收一个template什么T啊,就收一个这个。哎,你可以在这里弄一下,那你就会发现随着他new,它是不是就会被啊,就会被这个我们要命令斯干ner工作对吧,那这是什么,这个就是咱们在这。
09:08
这儿不是输出的模式死干净是吧,它模板字符串是不是进来了。是吧,诶模板字符串就进来了啊,这个点log删了吧,没用。哎哎,这块就是SC,那它这就到炸了。Scanner对吧,没问题。那这个scanner咱们现在要去给他提供两个方法啊,这两个方法呢,咱们啊,它的官方这两个方法呢,第一个方法叫SC。对吧,哎,第二个呢,叫做sc till。那么这两个方法啊,老师觉得这两个方法的名字不是起的特别好。哎,不是起的特别好啊,那对不是起的特别好啊,所以咱们现在呢,就给它重新起个名字啊,咱们首先呢,第一个这个叫SC啊till,咱们不要叫SC啊till。咱们管它叫什么呢,叫因为。
10:01
咱们说过。呃,比如说咱们现在这个是。模板字符串啊,大家注意看,现在这个模板字符串被render调到这里了啊,然后render又传给这个scanner了,对吧,那这个scanner的话,实际上构造技术拿到它了。啊,构造具有拿到它了,那么现在的话我们就能发现,就是我买了一个啊S。我们把这字变大啊,那这个scanner它。干什么用的,它是有一个指针。指针是什么?指针就是这个字符串的下标位置。哎,比如说现在它就是得零,它就指道这个我字啊,一二三四五六七八九十十一十二十三十四,十五十六十七十八十九,二十二一二二二三二四就这么走。啊,就这指针,所以就相当于什么呢,我们现在要分封装两个方法,第一个方法呢,是它寻找到能指寻找到指定标记。
11:05
就是能从这儿一直拉到指定标记,并且呢,它能把走的过程这个字给返回。啊,就是他能把走的这个过程给返回。哎,就是他能把这几个字返回,然后第二个呢,它是走这个标记内部。能明白吗?就是他第二个它是。直接寻找这个标记啊,就是说它这个标记不是在这个叫大括号,大括号吗。对吧,那这个时候这个大括号,大括号咱们。你懂的,是不是就可以略过它。对吧,就略过它,那略过它的话,我们是不是就可以再去寻找这个。这个大家能理解吧,哎,就是能寻找到。这里边的东西啊,那等于说它就两个功能,第一个功能就是找到某一个地方。到这儿。对吧,能把这些东西收集出来。没问题吧,哎。
12:00
到这个地方,并且收集到这个地方的所有文字。啊,咱们能能听懂这句话,就是到这个位置,并且收集。路过的所有文字,第二个呢,就是生生的跳过什么标记。就生生的跳过这个标记。然后指向新的就行,然后这个性怎么收集,那不是还是刚才说的第一种吗?就是让他到这儿,然后路过这儿啊。能明白吧,哎,所以它有两种操作啊,这也是就是原原来的它这个官方的SC和SC的含义。啊,就是这意思,咱们咱们给大家把这个图做仔细一点,就是说。这个这个指针从这个位置移到这个位置。看见了吗?那这个位置到这个位置要去使用的是scar。啊,Until。啊,是这个意思,叫扫描指导。啊,扫描直道啊SC啊,就这个名字确实比较不好听啊,但是咱们还是用这俩名字。
13:05
啊,咱也甭改名了,瞎改什么名。哎,但是老师告诉你这两个方法的目的是什么啊,然后呢,这个指针现在要从这。指向T。就是把这两个符号走掉。啊,那这个过程我们叫干。你可能特别不能理解啊,但是呢,官方就是这么写的,就是说他原来包就这么写的。看到了吧,这样的,然后这个指针要继续往后走,这指针要继续往后走啊,哎,咱们画在一张图上吧。对吧,这部分叫SC啊,这个这个叫SC好,他要继续往后走,他是不是要搜收集这个thing这个东西啊,那这个东西呢,它就又叫SC啊till。哎,又叫SC啊。到这个大括号。好,然后这个大括号就叫干,没错。啊,这个大框就要死干。
14:02
诶,我可以直接复制这个箭头啊。但是这块比较乱是吧,复制容易复制多啊。直接复制这些吧。好,就这个箭头,走到这儿又叫杠,看见没有?哎,就是干反而是没用的,干啊,To是最有用的。能明白吧,就是SC啊,T非常有用,因为它能够收集你走到某一个符号之前的所有文字,但SC没用,Scan就是扫描就过去。啊,磁卡尔替我有用,咱们也,我本来想打算给它改一个名字的啊,但是后来想了想,还是叫它原名吧,啊,因为这个函数的功能只要你能理解了对吧?哎,那就行了啊,那后边咱就不画了啊,这会又是sc sc till sc sc till。是这样子的。哎,所以咱们现在写一下磁SCT是干嘛的呢?是让咱们这个指针啊去进行扫描,哎,直到。
15:03
啊,直到遇见一个啊,遇见指定内容指定。内容是不是结束啊?哎,然后并且呢,能够返回。啊,他预他结束之前扫描。啊,就是路路过的啊这些文字。哎,那死干它功能弱,死干的功能弱,哎就是呃。就是路过啊,就是路过走过诶指定内容。啊,就是要路过这个指定内容。明白吧,哎,就是这意思,然后他没有返回值,这个干是没有返回值的。啊,没有返回值。是样子的。啊,所以它很好写,那这个时候的话,我们就可以去写一个指针。啊,那当前的指针。
16:01
咱们可以用这个,比如说叫啊或者IDX都行。啊,他的啊,他的。它的那个官方的那个包,它是用的POS,咱们这叫POS吧,就当前的这个位置,那为什么要加this,这个不用我说了吧,对吧,咱们在类当中一定构造器当中要写this啊,是这个东西的对吧。哎,本身,然后这个sc till就开始去向右走啊,就走这个字符串。啊,就走这个字符串。没问题吧,那怎么向右走,那是不是就是指针向右移呀。对吧,指针向右移,但是它指针向右移,它是一直移一直移。对吧,然后这里要收一个收一个就是摁啊摁的那个那个。呃,N的那个标记,咱们就叫n tag嘛。啊,就是说或者说叫stop,别叫end啊,就你要到哪里停止。啊,比如说遇见双大括号前双大括号啊,那这个东西可以是正则,咱们不要写正则。
17:00
咱们不写正则啊,咱们在这里就写字符串就行,咱们简化它,因为字符串肯定要比正则简单,那你你你就相当于你要让它循环起来。对吧,你肯定要有这种感觉,就是说它需要一直让指针向后移,移移移移。对吧,我要让指针向后移移移,但是指针要向后移移的情况下,它是不是给遇见这个T。它是不是才能结束啊。明白吧,哎,那怎么办,其实很简单呀,那这个时候的话,我们怎么样让他遇见这个。这个这个能结束。那这个时候是不是你就需要准备一个尾巴字符串?你明白吗?就是你要准备一个尾巴字符串。啊就什么意思呢,就是比如说现在当前指针只在啊,咱们再新建一个PPT啊给大家好好讲。这块算法还是挺精妙的,大家看一看啊,就是说我现在的想法是什么呢?我指针指在我的时候,那这个时候尾巴字符串是不是就是它后边的这些文字。
18:07
这能理解吗?就是它的尾巴,就是剩余部分。啊,指向乐了呢,那就这些地巴是它的尾巴,指向这个大括号呢,那就这个地方是它的尾巴。能不能理解?对吧,这个地方是它的尾巴。看见了吗?就这个地方,那那有尾巴的好处是什么?对有尾巴的好处是不是就是说什么呀,你可以检查你要的这个结束符号是不是位于尾巴的前两位,就是是不是在第零位。用index of就可以检查,这样的话它是不是就能够扫到它就结束啊。所以这块它是设计的很精妙。大家能理解吗?所以说这个就相当于是指针,然后一上来它有一个尾巴,尾巴的话呢,咱们就叫tail,官方也叫tail。啊,那就是咱们的模板字符串的啊,全部内容,所以我们把模板字符串当做尾巴,尾巴哎,一开始就是模板字符串的原文。
19:09
啊,一开始就是这个模板字符串的这个原文。尾巴。是这样子的。那所以说现在的话,它什么时候结束,很简单,就是说当我的这个尾巴。啊,我去测试index of当中这个step talk,它等于零的时候,等于零不是负一啊,负一表示没寻找到,等于零就表示的是这个尾巴的开头出现了它。能不理解。就是当。当尾巴的开头对吧,哎。不是它的时候,所以不是不是不等于零,是不等于零的时候啊。因为当尾巴的开头不是这个死道吗,泰然。的时候看见没有,不是stop tag的时候,就说明还没有扫描到这个stop tag。
20:02
对吧,哎,就说明你还没有扫描到这个S拉开,那这个时候就需要继续扫描。但是这个时候他就死循环了,因为你这个太高啊,我的天呐,我这是自动更新的啊,啊,我还没掉,我还没调这个方法啊。它就死循环了,为什么?因为你后移的时候,你T没变,T没变它永远不可能啊对吧,诶对,所以说你这个T要变T是不是就等于自己的什么呀,他们的ST没错吧。哎,他们那个tir的后边部分,那就是substream或者subst都行啊。啊,都可以。哎,就是它的子串,就是从开始的后边那个部分。能理解吗?因为你看你指针,比如说后移了,那现在指针是一。对吧,那我现在是后边是它的尾巴,注意是后边是它的尾巴。啊,后边的,但是呢,就是我们的这个尾巴什么意思呢?咱们现在尾巴定义成指针指向的后一位。
21:01
对吧,哎,那那他就是前两位,那他就到这儿就停了。这能理解吧,指针到这儿就停了。啊,它并不是指甲架行,但是如果你把尾巴定义成就比如说指针指在个这尾巴是包含这个个字的。啊,就是所谓的尾巴是包含这个个字的啊。哎,那这个时候它的好处是到这个大括号的时候,这个大括号本身也能算是尾巴啊,所以我们现在把尾巴是包括指针在内的后边文字啊,所以不是说他后边这一位,咱们之前可能老师呃讲错了,就是尾巴的定义是包括指向的这一位,后边这一位啊。对吧。哎,那所以说现在的话,我们就是让这位这块不用加一啊。因为我们是包括尾巴,就包括指针这一位后边的所有,我不用写第二个参数,那是不是就找所有啊,哎,就是改变尾巴。为啊,从当前指针。这个字符开始。
22:02
对吧,哎,到最后的全部字符,那你现在想想循环一开始对吧,是不等于零的啊,这个地方因为它一开始没有找到双大括号,那它是不是往后走,往后走的话尾巴就变成这个了,而这个尾巴。前两个不是他,所他又往后走,又往后走,直到到这儿结束。看见了吗?所以这个方法现在就写好了,它就可以进行测试。啊,他就可以测试,然后我PPT刚才这块忘了给大家看了,哎,咱们现在看一下这句话啊。叫每个功能独立,要拆解成独立的JS文件,然后JS文件通常是个独立的类,每个单独的功能呢,必须要能完成单元测试。啊,就说你这个功能要独立出来,能够完成一个单元测试。看见了吧,所以这个时候我们现在就要去测试这个sc till这个类,那咱们现在就可以测试一下SC,然后点什么SC啊till,我们让它寻找左大括号。
23:00
好,这个时候控制台诶报错了,他说subst of and fun啊,他说这块是安de fun啊,因为你没有把这time写在自己的属性上啊。咱们写个注释,就是将模板字符串写到。啊,写到自己,写到实力身上。好,然后这块就可以弄了,对吧,得到这个子串好,这时候没报错,没报错的话怎么办呢?那这个时候我为了证明它。它是对的,那我这个时候是不是可以把这个scanner的pose印出来,你看它是不是指向了个五,为什么是五呢?为什么是五呢?对,因为咱们把这模板也印出来啊。唠一下。对吧,为什么是五呢?因为这是012345,直到这个位置,指针现在指向了五,看见没有,是不是很好用啊。发现了吧,所以这个就是咱们要测试这个sc until啊,咱们要测试一下,这很好用啊。
24:06
对吧,然后这个时候咱们指针就指向了五。啊,那咱们再再对着PPT啊,我怕没给大家讲清楚啊,磁感表示的是让指针走到这个位置。啊,走到符合条件的这个位置,那这个时候你就需要有个尾巴,没有尾巴的话不好不好弄啊,不好弄,那有的同学说老师干嘛要尾巴呢?哎,直接自己的time类的T,然后再subt对吧,然后自己的POS,这样写不是太长了吗?还不如给它。提升这个尾巴这个词呢啊。这样看的清楚是吧。所以你就会很理解啊,有老师给你讲,你就很理解,哎,那他就能找到这个符号。没问题吧,啊,他找到这个,但是呢,你这个函数没完成,因为他要返回结束之前录过的文字。能能听明白吗?就是他要能把这些文字给收藏起来。啊,那怎么办?对,很简单,那你就记录一下它是从哪儿开始扫描的。
25:04
它是从这个字符串的哪里开始扫描的,记录一下吗?然后最后返回substream嘛,就返回一个子字符串不就行了。对吧,很简单啊,并且呢,它也是从上一次的那个尾巴对吧?哎,开始的这个啊,所以这是很简单,所以这块就可以开始记录一下啊,记录一下开始啊呃,执行本方法的时候的啊,这个这个这个这个值。对吧,哎,那咱们现在就可以记录一下,把这个或者cost定定它常量嘛。哎,Post pose咱们给它备份一下啊,就是backup。啊,就等于自己的POS,诶给他备份一下。啊,给它备份到这个里头。对吧,就是说开始走的时候这个这个指针啊,那你说开始的时候不是零吗?不一定,因为这一次调用的时候开始不是零,看见没有。
26:01
对吧,哎,开始就不是零。啊,Posts backup看见了没有这个post backup对吧。哎,没什么毛病。啊,然后这个post backup的话,那接下来它就可以返回,那返回什么,是不是就返回自己的temp这个里头啊,Subst stringam,还是sub substream好用啊。Subs stringam这个其实也可以改成subs string,因为它没有第二个参数都一样,Subs stringam是位置和位置,Subs是位置和长度,对吧,所以它是从开始你能想象到啊,这肯定没问题,从开始那个位置到当前的这个指针这个位置嘛。然后不包括这个指针位置,它不就能返回吗?因为它默认这个地方是不包括第二个,它从A到B啊,B前一位,但不包括B嘛。哎,所以这样的话呢,你你你这儿它就有返回值了。咱们刚才说过啊,咱们刚才说过说过什么,对,是不是说过这个scti sc这个是有一个返回值的。对吧,咱们说过呀。
27:01
啊,咱们这儿这儿不是写了吗?说过能够返回结束之前录过的文字啊。所以这块咱们就可以写一个叫words,然后这个words我们就可以给它进行一个输出。哎,那你看我买了一个是不是输出出来了。哎,他就寻找到这个收纳括号啊,很简单。对吧,好,然后接下来呢,咱们就要看这个SKYSKY功能很弱,它就是路过指定内容。对吧,那这个不就是你这个tag嘛,就我要过这个啊。那那太简单了,那这个时候是不是因为我调用干的时候。我敢肯定的是,他前两位一定是他。啊,但是为了防止万一,也可以写个if,哎,就是一定要写个if啊,就是一定是当前的尾巴的。Tag一定是等于零的,对吧,它当前一定是等于零的,因为我们一会儿的思路是先调sc till会把那个指针移到收纳括号这个上面。
28:01
对吧,哎,然后这个时候再叫SKYSKY的目的就是挑过他。哎,对,就跳过,那是不是就相当于tag有多长。有多长啊,比如双大括号就是二对吧,哎,长长度是二,因为跳过去嘛。啊,然后就让咱们的这个指针。哎,后移多少位就行了,所以就是自己的pose加上这个tag的Les这样的长度。啊,自己的POS加上这个Les的这样的一个长度,这不很简单吗?对吧,就就往后移就行了,然别的事儿不用干,别的事儿真不用干。啊,那这样的话,你看到这里它的位置是不是第五位。啊,第五位啊,因为咱们这是我买了一个,它指到这儿的第五位,然后你再一扫。哎,然后你这里你再去输出scan,哎,不是不是不是这写错了,这是不是在,因为刚才你是让他sc till了对吧,然后这个时候我再让他死干。
29:06
只干这收纳括号。对吧,然后死干之后我再看他的pose。是不是变成七了,很成功吗?是不是变成七了?对吧,就相当于这一部分的走过啊,它是sc till,直到指针走到这是sc till,然后他再往后走两位走到T了,这是SC的功能,就是干是弱的,他不能收集内容。那咱们现在玩法就很简单,对,咱们现在玩法就是。让他能找出来所有东西。所以这个时候他就要交替执行scarto和scar。能理解吗?就是他他怎么玩呢?官方原版也是这样子的啊,官方原版也是这样子,就是他要交替去执行,就是while。啊,Sc tner这个IL对吧,就当这个scan scanner这个ta不是空字符串的时候,因为如果它的。
30:01
尾巴是空说明它到头了对吧,或者说你看它的pose是不是不是到它的那个length死啊,因为到最后指针没指向最后一位都是可以的啊,它的它的指针没有到他那的ste lengths啊,就最后一位不是减一嘛,但是到最后一位后一位不是不减一吗。啊,就当这个指针没走完的时候,那我这个时候我就要让他先死干,不断的死干,Until。看见没有,不断的干until,然后再干。啊,这样的话他就能走完全程啊,当然这块它是他是报错了,看见没有啊,不是报错就是死循环了,死循环的话不可能不是咱们。是因为刚才我这是自动更新啊,诶这你看真是我是自动刷新还没写完的时候,它就开始执行了,刚才这Y我还没写完呢。啊,所以这个写循环语句的时候,它这个自动更新挺麻烦。他就不断的scar t sc。看见没有是这样的,那这个地方它就能收集这个word啊,然后呢,我就可以把这个word印出来,你看是不是我买了一个,那为什么后边是空,原因很简单,因为你你这里啊,这不是word。
31:13
对吧,哎,然后他去搜啊搜这个,呃,然后他就跳跳过走到这儿。对吧,哎,没问题,然后接下来的话,他是不是要继续往后走啊,往后走的话要寻找这个标记了,而不是这个标记了,但是他继续往后走的话,他哪怕感觉现在这个程序是有点问题的啊,你看他输出了九个空。发现了吗?哎,输出了九个空啊,那它还是有点问题的,我们看一下。哎,死干之后我们看一下这个。Word scannered post啊。哎,他确实是在往后走。看到了吧,第七位第九位,第11位,第13位,第15位,第17位啊,他确实在往后走,那这是为什么呢?这还是有问题,Scanner sc till看一看啊哦,因为咱们这个干这块啊干。
32:03
这个函数有问题,它是改变了pose,就没有改变尾巴。对吧,所以咱们这个尾巴没变啊,尾巴也要变了,所以它这个尾巴也要变成这样的一句话啊,让尾巴就等于它模板字符串从这位开始到后边的全部内容。啊,就是要。改变成什么呀?哎,改变尾巴从尾从当前这个字符开始啊。然后到后边全部字母好,这样的话就应该差不多,对了,我们看一下。它又有那个死循环是这块还有个bug,就是说你这个scar till它是要走对吧?哎,他是要寻找到这个标记啊,但是呢,他有可能在比如说你这个SC啊,又SC到这个M这个字了。对吧,哎,干走过来这两个符号啊,然后他要往后寻找,他是不是再也找不到这个开括号了。对吧,他是不是再也找不到这个开括号了,所以他这个时候这块就容易造成一个死循环。
33:00
大家明白吗?这块就容易造成一个死循环。啊,所以这块是当这个东西不等于零啊,一定要去写一个且对吧,哎且啊这样的话就就说。对,然后且它这个呃太不是空。啊就是且它的太不是空。对吧,哎,且或者是且它的pose是小于自己的这个template的lengths的啊,要不然的话,你这个while是死循环,它永远找不到啊。他就永远在执行这块,他就死循环呀。所以这块一定要加上一个且啊好,然后这样的话,我们再试一下这个网页,诶这网页现在是好的,不是死循环。那你看他现在就能收集了,叫我买了一个什么信号什么啊,你感觉挺怪的,但是因为他现在只找了开大括号。是不是B大括号没找啊。对吧,所以他收集到了我买了一个对吧,然后收集到thing啊thing好是吧,哎这样的。啊,所以这个时候它实际上再去调的时候,特别的有意思,就是他先去收集开大括号,诶把word输出,然后度过开大括号。
34:09
明白吗?对,然后度过开大括号。然后呢,对,他在收集什么呀,B大括号,没错,这块你猜对了啊,他在收集这个B大括号。看见了吗?哎,然后他再度过这个B大括号。啊,这样子的。啊这样子的,当然他这要输出这个word。这样来的。哎,我把这个word咱们在这儿。定义出来,也就是说他先要去收集。倒开大括号啊,左大括号。哎,之前的所有文字,然后输出它,然后便利这个两个大括号。然后他就要寻找呢,呃,一直寻找到又大两个大括号结束,然后把这个文字呢给输出啊,然后便利这两个对吧,那这样的话,你看是不是就给它拆出来了。
35:02
我买了一个C逗号,好木的啊。是不是拆出来了?对吧,这起码就是这个scanner类现在正常工作了,在scanner类最重要的就是你一定要能理解这个SC和SC。啊,到底是怎么回事,老师的这个图示上讲的很清楚,然后呢,你也要能理解这块为什么要加个且,因为不加且的话,这块就容易死循环。啊,这块容易死循环。然后注意就是咱们写个备注,写且很有必要啊。很有必要,因为防止找不到啊,防止找不到。那么寻找到最后啊,寻找到最最后诶也要停止下来啊,那么在原站就是呃,原原来的它的官方包当中,它有一个S方法啊,E方法呢,就是返回一个布尔值。来,嗯,就是他来返回一个布尔值,就说指针。
36:02
是否已经到头啊,返回布尔值,就是这个布尔值的意思,就是说它有没有指针到头,所以说这块呢,就直接写成这个。对吧,哎,指针到没到头啊,如果大于等于了,就说明到头了。看见没有,所以这块就可以直接写意this的ES原括号。啊。对吧,且自己。没到头,看见没有。啊,写自己没到头,当然这个自己没到头,写在前头也可以。这样短路它效率更高啊,就先判断它没有到头。Us end of string。哎,叫end of string啊。这个名字不是老师瞎起的啊,这个名字是那个官方包的名字,然后这块是不是也可以改了。哎,就是while scanneros啊,就是当scanner没有到头。
37:01
啊,当咱们这个死干,那没有到头。哎,然后就这么持续工作,就是说他先扫描左大括号输出文字,然后度过这左大括号,然后扫描右大括号,输出文字,度过这右大括号对吧。哎,这样子的啊,但是他千万别带死循环,他死循环的话就特别麻烦。啊,没有死循环太好了。好了,那这个死干类呢,我们就讲到这里啊,大概大家可以练一练啊,就是虽然写的东西比较少,但是值得一练啊。
我来说两句