相信大家都学过C语言(应该是大一计算机相关专业必学语言),也写过冒泡排序,其中有一段代码我觉得不是很方便,
那就是交换两个数组成员的值,需要用swap函数,或者定义临时变量用于交换(伪代码):
1 | if (arr[j] > arr[j + 1]) |
可以注意到,这是比较麻烦的,如果我们能有一个直接交换两个值的运算符那就好了,于是我在结绳4.0加入了’<=>’,
这个运算符用于交换值,比如上述代码可以简化为:
1 | if (arr[j] > arr[j + 1]) |
看起来要简单多了,那么结绳4.0又是如何实现的呢?说起来也简单。
首先,了解语法树的同志们都知道,在进行语法树标注的时候,会根据你自己设计的Visitor去进行语法树访问(当然没有设计Visitor请略过本文),
对于这个交换式,我取的英文名叫ExchangeTree,OK,当进行标注ExchangeTree的时候,我们可以得到左值和右值所对应的类型,这时需要检查左右两端的类型是否匹配,
如果不匹配,我想应该是不支持交换值的(如果你觉得可以那也行),如果两端类型匹配,这时可以将ExchangeTree修改为一串BlockTree,
包含三个子语句:临时变量定义语句、左值赋值语句、右值赋值语句,其实这相当于又把开始提到的那段代码还原了,但是这样可以方便开发人员编写代码,
这就叫编译器级别的特性(/手动狗头)