继续学习emacs,继续学习lisp,继续学习emacs lisp。继续分析之前没分析完的代码:

239_macroexp--cons功能以及实现分析_github

    这段代码实现是很简单,但是功能我觉得却是不好去描述的。因为传入参数的类型能够变化比较多,不同的类型应该会有不同的结果。

    简单分析,这个函数会检查输入的第1个参数和第2个参数是否是第三个参数的CAR和CDR,如果是的话返回第三个参数。如果不是的话,返回前两个参数组成的cons对象。其实,从这个意义上讲的话,这个函数大概什么时候都在尝试返回前两个参数组成的cons。

239_macroexp--cons功能以及实现分析_代码实现_02

    结果等同于创建的cons对象。

239_macroexp--cons功能以及实现分析_github_03

    结果等同于创建的cons对象。

    那么,这个函数跟直接创建一个cons对象相比还有什么不一样的地方呢?我觉得,这个还带有一个对第三个参数的检查。如果第三个参数不是一个const类型,会报错。

239_macroexp--cons功能以及实现分析_github_04

    这是emacs的实现代码,我姑且验证一下我的想法:或许,直接返回一个cons对象emacs兴许也能够工作。我的代码修改如下:

239_macroexp--cons功能以及实现分析_代码实现_05

    重启emacs测试,emacs没有发现异常。或许在一定程度上可以证明我的猜测,只能是一定程度,毕竟也有可能,这些功能每调用。

    关于这个函数,我查了一下elisp的手册并没有找到。或许,这算是一定意义上的静态函数吧!