首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`flet`应该替换为``cl flet`还是``cl letf`?

`flet`应该替换为``cl flet`还是``cl letf`?
EN

Stack Overflow用户
提问于 2013-09-19 21:12:00
回答 4查看 4.4K关注 0票数 17

我安装的一些elisp函数会生成警告:

代码语言:javascript
复制
`flet' is an obsolete macro (as of 24.3); use either `cl-flet' or `cl-letf'.

如果我简单地用cl-flet替换所有的flet会有危险吗?如果可以替换它们,哪一个更好?

如果替换它没有危险,我会向项目发送拉取请求。

他们不改变它有什么原因吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-19 21:15:53

flet既不同于cl-flet也不同于cl-letf。它更危险(也可能更强大)。这就是它被弃用的原因。

因为它是不同的(动态绑定一个函数名),所以您必须在每种情况下都考虑用cl-flet替换它是否合适。

不能用cl-flet替换flet的小示例

代码语言:javascript
复制
(defun adder (a b)
  (+ a b))

(defun add-bunch (&rest lst)
  (reduce #'adder lst))

(add-bunch 1 2 3 4)
;; 10

(flet ((adder (a b) (* a b)))
  (add-bunch 1 2 3 4))
;; 24

(cl-flet ((adder (a b) (* a b)))
  (add-bunch 1 2 3 4))
;; 10

请注意,cl-flet执行词法绑定,因此adder的行为没有改变,而flet执行动态绑定,这使得add-bunch临时产生阶乘。

票数 9
EN

Stack Overflow用户

发布于 2013-09-20 03:51:10

我最近写了一篇关于这个主题的post。这篇文章的要点是nofletflet的最佳替代品(如果你需要动态绑定)。它是一个第三方库,但它几乎是flet的临时替代品(同时增加了一些额外的功能)。

票数 6
EN

Stack Overflow用户

发布于 2015-03-09 00:00:46

正如阿图尔在this博客文章中描述的那样,cl-letf函数可用于动态绑定函数。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18895605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档