这种warning怎么消除啊

有人知道这种warning是什么原因吗,如何消除

(defvar TRANS_API_HOST “http://api.fanyi.baidu.com/api/trans/vip/translate”)
(defvar APPID)
(defvar SECURITY_KEY)

Compiling file d:/emacs/.emacs.d/something-fun/baidu-translate/baidu-translate.el at Sun Aug 11 10:58:08 2019
baidu-translate.el:32:1:Warning: global/dynamic var ‘TRANS_API_HOST’ lacks a prefix
baidu-translate.el:35:1:Warning: global/dynamic var ‘APPID’ lacks a prefix
baidu-translate.el:37:1:Warning: global/dynamic var ‘SECURITY_KEY’ lacks a prefix

还有着两个也不是特别懂
baidu-translate.el:45:11:Warning: assignment to free variable ‘buffer’
baidu-translate.el:48:24:Warning: reference to free variable ‘buffer’
In baidu-translate-string:
baidu-translate.el:96:33:Warning: assignment to free variable ‘GBKS’
baidu-translate.el:96:16:Warning: reference to free variable ‘GBKS’

Elisp没有命名空间,所有符号共享一个命名空间。所以变量和函数都要用prefix,prefix一般就是你的包名。e.g baidu-translate-your-function

另外lisp没有全大写标记常量的习惯,就正常写变量就行。可以考虑常量的defvardefconst

所以你这本地变量buffer不用let声明就直接使用了?

1 个赞

感谢指点,:grin:,第一次提交插件,翻了好多错误,多谢了

顺带说一句,provide语句一般会放在所有def块(defun,defvar,defmacro等)上来就一个provide已经不流行了。

provide是干啥的啊,我只知道加了之后就可以用require加载,不必使用load