212_emacs lisp when条件分支

    完整的common lisp的学习集合整理如下:

    https://github.com/GreyZhang/g_lisp

    继续进行spacemacs的配置分析以及emacs lisp的学习,接下来再看一个函数实现:

    又一次遇到了好几个不熟悉的语言元素,选择其中一个来做深入学习,这一次选择when吧!

    先看一下内置的帮助信息:

    看上去,这个功能跟if的条件分支基本上相同的。那么为什么还会有这么一个结构呢?从实现上看,这个是一个lisp的宏,这个与if是不同的。在看看if的信息做一下对比:

    相比之下,感觉if是更加底层和基础的东西。或许when实现了与if相同的功能,只是为了让语言更加贴近于人类语言的表达?

    从elisp的文档中再找一下相应的信息:

    从这段文档信息可以看出来,这个确实是与if相似,其实是if的一个变体。不同点在于if的分支还有一个else,而when是没有else的。

    接下来,做几个测试看看这个宏的使用。

    如果条件不成立,有一个nil的返回值。但是,这个从功能上还是有点不好跟if做一个区分,或许把这个理解为一个简单版本或者功能受限制的if会更好一些?毕竟本身if似乎也能够完成上面的功能。

    最后,为了验证我自己的想法,把spacemacs中的这个when改成if做一次重启测试。

    测试了一下,功能也是正常的。看起来,这个或许纯粹是一个出于习惯上的一种表达吧!

其他的lisp相关的学习笔记汇总,可以参考如下链接:

    https://github.com/GreyZhang/g_lisp

 

发布了812 篇原创文章 · 获赞 163 · 访问量 172万+

猜你喜欢

转载自blog.csdn.net/grey_csdn/article/details/104223675