粉丝917获赞374

接下来我们要讲一下刚刚这个 s 三不加分号的作为返回值这个操作,哎,我们要知道 rest 这个语言里面万物皆是表达式,万物皆有返回值,哎,如果没有什么要返回东西,它就会返回一个空的括号,这个就是空的原组。我们比方说啊,我们定义一个 age 等于二十, let age 等于二十,这是一个创建了不可变变量,然后 let status 等于,哎,注意哦,这一段是一个 if 的 判断结构,很神奇吧,连 if 这种语句,它都能直接出一个结果, if h 大 于等于十八,哎,直接就是成年,哎,它直接走这条通路,否则 else 它就是未成年,对吧?它这个地方也没有分号这个作用域内也没有分号,对吧? 它就是作为返回值去返回,所以它其实这一旁简单代码,它直接就创建两条通路,只要它去判断这个 theta, 他就是他去判断这个 a 值是不是大于等于十八,如果大于等于十八,那就返回一个成年付给这个 status 的 这个量,然后如果没,如果是小于十八,那就付一个这个未成年给这个 status 这个量。所以衣服这个东西它都有返回值,很神奇,它就是作为一个函数的返回值。 ok, 好, 那现在还能进行一个很神奇的操作,就是啊, let a 等于啊,这个是作用域的符号,对不对?然后里面你再声明一个变量, let b 等于十,然后一个分号, 这个是什么呢?这个操作也有返回值,但是可能不是大家想的那样,是不是大家觉得就是这样子操作之后,哎,它就能出现啊,一个让 a 等于 b 等于十的一个操作,哎,实际上不对, a 现在是变成一个空的圆组,为什么呢?因为 let 也有返回值, let b 等于十分号,它是一个完整的结构,它这么一个行东西结束之后,它会返回一个空的圆组。 好,那你相当于把一个空的原组赋给这个 a, 这个十给了谁呢?给了 b 啊,给了 b, 对 不对?它直接就到了这个 b 的 身上,但是这个 b 它一出生就去世了,因为它的这个生命周期超超不过它的作用域,所以它就直接去世了。 所以 a 等于原组,你你再行再把写出来,就是啥都不会发生,就 a 等于一个原组,空原组,然后这个 b 你 也用不了,因为它在这个啊,作用域的内部。好吧, 好的,接下来我们继续讲这个 b 包 b 包它是什么呢?它是一个匿名函数。我们还是来简单讲,用一个例子来讲一讲, let x 等于四啊,就是声明,声明和 x 不 可变的数字四。好,我们又定义了个函数, let add x 等于 两个竖杠,是吧?两个竖杠像的绝对值一样,但跟绝对值没什么关系。这是一个 b 包的 b 包的写法。 ok, 它表示你要传的参数它,我们说了它是匿名函数,就是说这个函数它没有名字。比方正常的函数是不是我们一般给它取个名字,无论你取什么,比方说来个啊, function 内 may, 对 吧? may 就是 它的名字,但 b 包它是没有函数的。然后这个 y 的 作用它相当于这个函数的里面的一些变量啊。比方说放,呃,这个,这个叫行餐啊,这个就叫行餐啊,它就相当于一个行餐,它是一个占位符,它真正的时餐需要你进行传递调用的时候才会传进去啊,这也是啊 rust 的 一个懒惰的特点。好了, 那我们看一下它这个 y 发生什么事,后面紧跟了一行话 y 加 x, 那 它的作用就是跟跟拿你这个东西 跟 x 相加,哎,这个这个,这一行东西的作用就是如此。大家可能很奇怪,就是这行东西难道不需要返回就是呃,这个大括号吗?哎,是,其实是需要,但是啊, rust 觉得就是这这玩意足够简单,它就不需要加这个啊大括号了。作用域,如果你是想写 一行以上就是两行及两行以上的代码的话,你必须加上一个作用域的大括号啊。 print 正在计算点点点 y 加 x, 哎, y 加 x 就是 返回值,就是你最后得到的东西。好的, 这就是 b 包的作用,它相当于一个非常简化的一个操作。好的,有了这个定义之后,我们是不是就可以用它了啊?我们直接把它类似看成像一个函数,一个变量,直接 add x, 嗯, m 就是 比方说我 let n 等于五,对吧?然后一个分号,然后 m 等于借用 n, 它就是一个 m 的 只读地址啊,对不对? ok, 那 把 m 传进去,它是不是把五传进去,那就相当于四加五,对不对?那最后打印出来, print line 感叹号,五加上 四的值是不是就是九?哎,它就是这个意思。 ok, 跟大家说一下,它里面本质是什么呢?其实它定义了个就很像 c 加加里的 plus, plus 既有 in it, 对 吧?这个抽象方法啊,就是一些属性,对吧?直接属性定义好一个 x 等于四给它传进去,它里面四是自带的啊,然后它的方法是什么呢?就把你传进来这个 y 跟它 c f 点 x 加 y, 然后直接 return 出去,就是背后就是完成了这么一个操作啊,它相当于 add x, 其实相当于啊, python 里面的一个类,一个 class。 ok, 好, 这这个东西就非常好用了,直接传一个值出来,然后它就直接出来一个,就是定义起来很方便,用起来也很方便,非常爽, ok。
