无论论证是什么,它似乎都没有做任何事情.它也不会以任何方式影响字节编译警告.如果按照其描述使用.有没有如何使用它的例子?
例如,下面的代码:
(defmacro deflocal (var &rest body)
(let ((symb var)
(val (car body))
(doc (cadr body)))
`(progn
(let ((byte-compile-warnings nil))
;; (byte-compile-disable-warning 'make-local)
(set (make-local-variable ',symb) ,val)
(put ',symb 'variable-documentation ,doc)
;; (byte-compile-enable-warning 'make-local)
))))
Run Code Online (Sandbox Code Playgroud)
可以做任何想做的事情byte-compile-warnings,它不会以任何方式影响编译器的输出(我仍然会收到关于赋值给自由变量的警告.
编辑:
因为这在我上面的描述中是不透明的.这就是我不想使用的原因defvar.我有一个交互式函数,它将启动一些交互式shell,用于与Emacs之外的程序进行通信.这个shell可以由用户直接启动,间接进入几种不同的主要模式或执行其他任务时,如编译,检查语法等.该系统相当复杂.
我遇到过很多次,某些函数最终可能会在我不想要的缓冲区中设置变量.例如,当编译钩子调用一个函数,该函数假定它在拥有连接对象的缓冲区中被调用.连接可能会失败,因此一旦发现它因任何原因失败,系统就会尝试自动恢复连接(不幸的是,我必须连接的其他程序非常不稳定,而且其通信设施实施不当) .因此,例如,如果flymake进程突然意识到它需要恢复连接,它将在任何缓冲区flymake创建它.同样,编译模式缓冲区,完成缓冲区,帮助缓冲区等.这是非常困难的情况下的这些更改后跟随.
现在,当我可以确定没有其他缓冲区会意外地声明变量引用连接对象时,否则它会出错,我很安全,并且很容易调试并解决出现的问题.但是,一旦我使用defvar,过了一段时间后我才意识到已经创建了一些胭脂重复的过程,而且我完全不知道是谁做到了这一点.
的确,byte-compile-warnings不做你想做的事.相反,你可能想要用(defvar <VAR>)某个地方声明你的变量,或者包装触发警告的代码with-no-warnings.
byte-compile-warnings您的代码中的let-binding 将在代码运行时应用,而不是在编译时应用.
编辑:
下面是一个简单的测试,得到确信,使用defvar只有一个参数不变量绑定到处都是,如解释在这里:
(defvar foo)
(boundp 'foo) ;; -> nil
(defvar bar t)
(boundp 'bar) ;; -> t
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
808 次 |
| 最近记录: |