if/when-let(*) 和 and-let* 的演变历史(也就是 foo-let(*))

没仔细读过if-let(*) 的文档。一直以为它们真的就是和 let(*) 一样,一个支持顺序绑定,一个只支持并行绑定的。(所以我用的时候也是一直按照这个语义来在不同的场景使用 when-let 和 when-let* 的)

直到这个帖子才知道原来 if-let(*) 的区别只有一个绑定的时候可以省略一对括号而已。

只能说 let 表示并行绑定而 let* 表示顺序绑定太过深入人心,看到形似的就会这样想…

写了个总结,整理了一下。

2 个赞

总结一下几个问题:

  • 定义移进 subr.el 时没有严格的审核机制看是否设计合理
  • 进了 subr.el 以后还能随意改行为,在这个阶段即使是 bug 也该认成 feature 了吧,这里的问题不是要不要 obsolete (当然进 subr 才没几年就 obsolete 也是伤信任),而是能不能改同名定义的行为,这个可不能乱开先例
  • 已经有 mepla 开发者意识到自已没被 emacs-devel 当人看

以及

  • 瞎引入 Clojure feature 终于吃到苦果了
  • 不用抽象是最好的
  • 没有 let 版本却有 let* 也过于抽象了

亲身体会过几次

3 个赞

非常好总结,我改一下解决方案

不是很理解保留个alias会出什么问题,

这又不是个人配置文件,随便重构。

有这时间不如删删内置的包,省点分发空间也是