面向未来的防御 - 如果可用,使用,如果不是,则定义等效

时间:2014-07-02 07:14:37

标签: emacs elisp future-proof

我现在正在使用emacs 24.3,因此hash-table-values不可用。所以我想写这个函数,但前提是它不存在。这样,我的代码现在可以正常工作,并且当我切换到emacs 24.4时它会使用默认功能。

在PHP中,我写了类似的东西:

if (!function_exists('hash_table_values')) {
    function hash_table_values() {}
}

在elisp中是否有一些等同物?

1 个答案:

答案 0 :(得分:3)

感谢#emacs @ freenode的一些指导,这是神奇的功能:fboundp

(unless (fboundp 'fn)
  (defun fn ()))

真正实现hash-table-values

(unless (fboundp 'hash-table-values)
  (defun hash-table-values (hashtable)
    (let (allvals)
      (maphash (lambda (_kk vv) (push vv allvals)) hashtable)
    allvals)))

感谢hash-table-values实施的ergoemacs。