虽说早就添加了bool类型支持,然而bool表达式的解析总是有些问题,今天一天基本是在解决这些琐碎的小bug,解决办法无非是反复断点调试+反复变换的UnitTest。后来发现原来是拼错了一个单词,Add拼成了And,导致token读取位置出错,改了之后完美运行。
今天最蛋疼的还是github,远程提交总是出错,每次都出错,弄了很久的命令行才成功,成功了都不知道是为什么。反正基本上是客户端提交失败就换命令行,命令行失败就换客户端。以前明明很顺的。
js解释器计划继续添加以前忽略的特性,每天都发现有很多to-do list,真是可怕,越写越长。
- for / for..in
- do..while
- Array(DictArray) [] {'1':2,'3':3} 直接创建Array
- object {} 对象字面量{a:10,b:function(){}}
- 支持解释多行语句
- Math
- proto
- es6新特性支持
- String Array Function Library
今天太热了,下午完全写不动代码,晚上发现了一个奇怪的bug,1==1居然返回false,耗费良久时间解决不了,结果总是和真是结果反着来,我被迫将==的回调函数写成了这样:
(s1,s2)=>s1 != s2;
然后居然结果就正确了,我百思不得其解,明明>,<,<=,>=都是正常的,唯独这个==的回调非要反着写才返回true。不知道这是哪根筋搭错了。
用
(s1,s2)=>s1 == s2;
试验1==1,居然亲眼看见返回了false,我瞎了。。。
被迫反着写了2333333333。昧着良心。
最后发现是要重载==和!=,喵的因为我的JsNumber的value虽然是int类型,然而C#编译器好像不认一样,我服。
public static bool operator ==(JsNumber num1,JsNumber num2)
{
return Object.Equals(num1.value, num2.value);
}
public static bool operator !=(JsNumber num1, JsNumber num2)
{
return !Object.Equals(num1.value, num2.value);
}
不过说起来,重载运算符还是在C++里面方便,C#这重载语言看着不合常理。不过C#其他方面太优秀了,瑕不掩瑜。
网友评论