- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想有条件地将不同的代码片段写入我的 elisp 文件 (.elc) 的编译版本,我可以使用函数定义来做到这一点:
(defalias 'my-test
(eval-when-compile
(if nil
(lambda ()
(message "True"))
(lambda ()
(message "False")))))
使用上面的代码,我可以将不同的匿名函数分配给 my-test
基于不同的条件,结果将写入编译的 .elc
文件。但我想写的是文件范围中的函数调用。像这样:
(eval-when-compile
(if nil
(add-to-list 'auto-mode-alist '("\\.gitconfig\\'" . A-mode))
(add-to-list 'auto-mode-alist '("\\.gitconfig\\'" . B-mode))))
;; or using `when' to either write a call or do nothing:
(eval-when-compile
(when (not (eq (user-uid) 0)) ; if uid != 0
(dangerous-call)))
代码在编译时进行评估,评估结果仅在编译过程中可用,之后什么都不会进入 .elc
, 因为我没有将它分配给任何东西,但是我怎么能写出 if
的字节编译结果呢?控制(这是对 add-to-list
函数的调用)到已编译的 .elc
文件?在这种情况下,我想要 (add-to-list 'auto-mode-alist '("\\.gitconfig\\'" . B-mode))
写入 .elc
文件。
最佳答案
我认为这个问题的答案是宏:如果你编写一个扩展为你想要的代码的宏,然后简单地在顶层调用宏,那么宏的扩展将在编译后的代码中结束文件。
所以:
(defmacro foo ()
(if <compile-time-condition>
`(setq ...)
`(setq ...)))
(foo)
警告:您只能根据您在编译时知道的事情进行条件化:您在 UID 上调度的示例可能无法达到您的预期。
关于emacs - 根据不同的条件,将不同的代码片段写入编译后的 (.elc) 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35392211/
我最近开始使用 django-html-mumamo-mode ,它是 emacs 中 nXhtml 的一部分,除了当我开始在 html 页面中编写 javascript 代码时,我得到警告/错误 C
我想有条件地将不同的代码片段写入我的 elisp 文件 (.elc) 的编译版本,我可以使用函数定义来做到这一点: (defalias 'my-test (eval-when-compile
我知道当有一个 .el 文件 (.elc) 的字节编译版本时,emacs 会加载第二个版本(我目前将它们放在同一目录中)。 当我启动 emacs 并查看我的消息缓冲区时,我看到: Loading c:
我在我的项目中使用 ELC Image Picker。在这里,我遇到一个问题: 当我选择像 20 个选择器这样的图像时工作正常但是当我选择像 32(所选图像计数)这样的图像时我的应用程序在关闭 Con
我是一名优秀的程序员,十分优秀!