270_common lisp函数定义参数的其他细节

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

https://github.com/GreyZhang/g_lisp

    继续lisp的学习,继续看一下common lisp的函数定义。看了两天,感觉这个common lisp在功能的完善度上似乎确实是比emacs lisp要完善一点。

    看一个例子。

    Key参数是可以设置默认数值的,这个之前在emacs lisp的学习中也小结过。不过common lisp更加灵活,可以直接指定而不需要在代码中做判断。

    上面的这个函数,在没有任何参数指定的时候也可以工作。其实,还有另一个参数功能,用来判断这个参数是否被设置过。先看一个简单的代码:

    如果没有默认值设置的时候,默认情况下参数是未绑定状态,也就是nil。这时候,可以通过逻辑判断在一定程度上判断出参数是否被指定了。

    为什么前面说是在一定程度上可以判断呢?需要考虑如下的情况:

    这个时候的判断,其实是判断错了的。那么,这种情况是否还有改进点呢?其实,在common lisp中是有的,除了默认值之外,还有一个状态参数可以自动获取参数是否指定的状态。

    这种方式,在很多信息判断上似乎只是离我们很近,但是依然不是我们的解决方案。为什么呢?我们提到的参数还是没有增加。

    经过上面这样的修改,之前考虑到的问题全都解决了。其中引入的foo-set和bar-set两个参数就是用来获取两个参数的指定状态的。而且,这个时候即使是传入一个nil的数值,也不会影响到相应的判断。

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

https://github.com/GreyZhang/g_lisp

发布了891 篇原创文章 · 获赞 170 · 访问量 176万+

猜你喜欢

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